We need to move our arm in autonomous but can’t figure out how to program in a delay to regulate how long the motor stays on for. How is everyone else doing this??
Declare a global int counter, or a static int counter.
Suppose your autonomous mode can be divided into stages, like:
Stage 1: Drive closer to rack
Stage 2: Use camera to detect rack
Stage 3: Drive to vision target
Stage 4: Position Arm
Stage 5: Place ringer
Inside your autonomous routine, have something like this:
if(counter >= 0 && counter < STAGE_ONE_END)
{ // actions to do in stage 1
}
else if(counter >= STAGE_ONE_END && counter < STAGE_TWO_END)
{ // actions to do in stage 2
}
else if(counter >= STAGE_TWO_END && counter < STAGE_THREE_END)
{ // actions to do in stage 3
}
… // more if statements
counter++;
The actual values of STAGE_ONE_END and so on would be determined experimentally. Or you could decide for exactly how long you want each stage to run, then take the cycle rate of the CPU (xx.x milliseconds) and determine how many iterations are equivalent to your desired time.
Use a counter. Its 26.2 ms for each time User_Autonomous_Code() is called.
#define STAGE_1 0
#define STAGE_2 1
#define STAGE_3 2
inside User_Autonomous_Code()
static stage;
int counter;
state = STAGE_1;
while (autonomous_mode) /* DO NOT CHANGE! */
{
switch (stage)
{
case STAGE_1:
// turn motor on here
counter = 0;
stage = STAGE_2;
break;
case STAGE_2:
++counter;
if (counter = 38) // 1 second
{
// turn motor off here
stage = STAGE_3
}
break;
}}