Étape 8: Deuxième col : résoudre le labyrinthe aussi vite que possible !
Le programme principal : boucle () est simple comme ça :
void loop()
{
ledBlink(1) ;
readLFSsensors() ;
mazeSolve() ; Première passe pour résoudre le labyrinthe
ledBlink(2) ;
tandis que (digitalRead(buttonPin) {}
pathIndex = 0 ;
statut = 0 ;
mazeOptimization() ; Deuxième passage : exécutez le labyrinthe aussi vite que possible
ledBlink(3) ;
tandis que (digitalRead(buttonPin) {}
mode = arrêté ;
statut = 0 ; 1er pass
pathIndex = 0 ;
pathLength = 0 ;
}
Ainsi, après la fin de la première passe, ce que nous devons faire n'est qu’alimenter le robot avec le tableau chemin optimisé. Il va commencer à exécuter et lorsqu’une intersection se trouve, il va maintenant définir quoi faire fonction sur ce qu’il est stocké au chemin d’accès [].
Pour commander ce qu’il faut aller, une nouvelle fonction mazeTurn(path[])a été créé.
void mazeOptimization (void)
{
tandis que (! statut)
{
readLFSsensors() ;
interrupteur (mode)
{
affaire FOLLOWING_LINE :
followingLine() ;
rupture ;
affaire CONT_LINE :
Si (pathIndex > = pathLength) mazeEnd () ;
else {mazeTurn (path[pathIndex]); pathIndex ++;}
rupture ;
affaire LEFT_TURN :
Si (pathIndex > = pathLength) mazeEnd () ;
else {mazeTurn (path[pathIndex]); pathIndex ++;}
rupture ;
affaire RIGHT_TURN :
Si (pathIndex > = pathLength) mazeEnd () ;
else {mazeTurn (chemin d’accès [pathIndex]); pathIndex ++;}
rupture ;
}
}
}
La fonction mazeTurn (path[]) sera :
void mazeTurn (char dir)
{
Switch(dir)
{
case « L »: / / tourner à gauche
goAndTurn (gauche, 90) ;
rupture ;
case « R »: / / à droite
goAndTurn (droit, 90) ;
rupture ;
affaire « B »: / / demi-tour
goAndTurn (droit, 800) ;
rupture ;
de cas ': / / aller tout droit
runExtraInch() ;
rupture ;
}
}
La seconde passe est maintenant terminée !
La vidéo ci-dessous montre qu'un exemple complet travaillé ici, premier et deuxième col :
Ci-dessous le code d’Arduino utilisé sur ce Instructable :