Étape 3: Fixer le problème : Code
C’est la fonction de mouvement que nous utilisons en autonome. Il faut un apport de distance (calculée en pouces pour la facilité de programmation), la vitesse, une position de cible et une option frein/côte. Pour ce faire, il faut une position active, ainsi qu’une position de la cible.La façon dont cela fonctionne combine les valeurs actuelles de codeur pour obtenir un fonctionnement total que les lecteurs de robot. Les fonctions leftMotor() et rightMotor() obtenir alimentés un certain nombre et définir tous les moteurs d’entraînement à cette vitesse. Ils pourraient être remplacés par "moteur [motorLeft] = (vitesse + correction) » et « moteur [motorRight] = (vitesse - correction) ».
void moveDistanceAtSpeedOnHeading (float distance, int vitesse, float targetHeading, court goNoGo)
{
flotteur diff ;
float calculatedDistance ;
float combinedEncoderDistance ;
correction de l’int ;
calculatedDistance = abs(distance * 120) ;
diff = targetHeading - Cap ;
nMotorEncoder [motorLeft] = 0 ;
nMotorEncoder [motorRight] = 0 ;
wait1Msec(200) ;
for(;;)
{
combinedEncoderDistance = abs (nMotorEncoder [motorLeft] + nMotorEncoder[motorRight]) ;
if(combinedEncoderDistance > calculatedDistance)
{
même si (combinedEncoderDistance == abs (nMotorEncoder [motorLeft] + nMotorEncoder[motorRight]))
{
wait1Msec(5) ;
}
Si (abs (nMotorEncoder [motorLeft] + nMotorEncoder[motorRight]) > calculatedDistance)
{
continueLoop = false ;
rupture ;
}
}
diff = targetHeading - Cap ;
correction = diff * CORRECTIONGAIN ;
leftMotor (vitesse + correction) ;
rightMotor (vitesse - correction) ;
wait1Msec(5) ; Ajoute une valeur de 5 parce que c’est environ deux fois plus vite que les encodeurs mettent à jour leurs valeurs
}
if(goNoGo == NO_GO)
{
leftMotor(0) ;
rightMotor(0) ;
}
}