FTC sporadiska Encoder värden (3 / 4 steg)
Steg 3: Sätta fast problemet: kod
Detta är funktionen rörelse vi använder i autonoma. Det tar en insats av avstånd (beräknat inches för enkel programmering), hastighet, en target rubrik och ett alternativ för broms/kust. Att detta ska fungera, en aktiva rubriken krävs, förutom en target rubrik.Hur detta fungerar kombinerar encoder aktuella värden för att få ett spring total som robot-enheter. Funktionerna leftMotor() och rightMotor() få matas flera och ställa alla drive motorer till det rusat. De skulle kunna ersättas med "motor [motorLeft] = (hastighet + korrigering)" och "motor [motorRight] = (hastighet - korrigering)".
void moveDistanceAtSpeedOnHeading (flyta avstånd, int hastighet, flyta targetHeading, kort goNoGo)
{
float diff;
float calculatedDistance;
float combinedEncoderDistance;
int korrigering;
calculatedDistance = abs(distance * 120);
diff = targetHeading - nr,
nMotorEncoder [motorLeft] = 0;
nMotorEncoder [motorRight] = 0;
wait1Msec(200);
for(;;)
{
combinedEncoderDistance = abs (nMotorEncoder [motorLeft] + nMotorEncoder[motorRight]);
IF(combinedEncoderDistance > calculatedDistance)
{
medan (combinedEncoderDistance == abs (nMotorEncoder [motorLeft] + nMotorEncoder[motorRight]))
{
wait1Msec(5);
}
om (abs (nMotorEncoder [motorLeft] + nMotorEncoder[motorRight]) > calculatedDistance)
{
continueLoop = false;
bryta;
}
}
diff = targetHeading - nr,
korrigering = diff * CORRECTIONGAIN;
leftMotor (hastighet + korrigering);
rightMotor (speed - korrigering);
wait1Msec(5); lagt till ett värde av 5 eftersom det är ungefär dubbelt så snabb som kodare uppdatera deras värden
}
IF(goNoGo == NO_GO)
{
leftMotor(0);
rightMotor(0);
}
}