The easiest way to do this is to increment a variable every time you get new data from the master processor.
Default Autonomous:
Code:
while (autonomous_mode) /* DO NOT CHANGE! */
{
if (statusflag.NEW_SPI_DATA) /* 26.2ms loop area */
{
Getdata(&rxdata); /* DO NOT DELETE, or you will be stuck here forever! */
/* Add your own autonomous code here. */
Generate_Pwms(pwm13,pwm14,pwm15,pwm16);
Putdata(&txdata); /* DO NOT DELETE, or you will get no PWM outputs! */
}
}
The first thing you need to do is create a static variable to use as a counter.
Then you need to increment the variable. The easiest way to do this is to increment the counter each time you get new data.
Code:
while (autonomous_mode) /* DO NOT CHANGE! */
{
if (statusflag.NEW_SPI_DATA) /* 26.2ms loop area */
{
Getdata(&rxdata); /* DO NOT DELETE, or you will be stuck here forever! */
i++; // this will increment the 'i' variable by 1.
/* Add your own autonomous code here. */
Generate_Pwms(pwm13,pwm14,pwm15,pwm16);
Putdata(&txdata); /* DO NOT DELETE, or you will get no PWM outputs! */
}
}
Now you can calculate the time by multiplying the time span(26.2) by the number if times(i) to get the actual time.
Code:
int time;
while (autonomous_mode) /* DO NOT CHANGE! */
{
if (statusflag.NEW_SPI_DATA) /* 26.2ms loop area */
{
Getdata(&rxdata); /* DO NOT DELETE, or you will be stuck here forever! */
i++; // this will increment the 'i' variable by 1.
time = (i * 262)/2500 // if you avoid the decimal, by multiplying the time span by 10, your code will execute faster because it will not use a floatig points.
// I divide the time(in 10000enths of a second) by 2500 so I get a result in 1/4 of a second
Generate_Pwms(pwm13,pwm14,pwm15,pwm16);
Putdata(&txdata); /* DO NOT DELETE, or you will get no PWM outputs! */
}
}
Example code to drive forward 1 second, then reverse for 1 second.
Code:
int time;
while (autonomous_mode) /* DO NOT CHANGE! */
{
if (statusflag.NEW_SPI_DATA) /* 26.2ms loop area */
{
Getdata(&rxdata); /* DO NOT DELETE, or you will be stuck here forever! */
i++; // this will increment the 'i' variable by 1.
time = (i * 262)/2500 // if you avoid the decimal, by multiplying the time span by 10, your code will execute faster because it will not use a floatig points.
// I divide the time(in 10000enths of a second) by 2500 so I get a result in 1/4 of a second
//drive code\\
if (time < 4) pwm01 = pwm02 = 255; //forward
else if(time < 8) pwm01 = pwm02 = 0; //reverse
else if(time > 8) pwm01 = pwm02 = 127;//stop
Generate_Pwms(pwm13,pwm14,pwm15,pwm16);
Putdata(&txdata); /* DO NOT DELETE, or you will get no PWM outputs! */
}
}
I think that is what your looking for.
Hope this helps, and sorry for the long post.
