Paso 8: Segundo paso: resolver el laberinto tan rápido como sea posible!
El programa principal: () bucle es simple como eso:
void loop()
{
ledBlink(1);
readLFSsensors();
mazeSolve(); Primer paso para resolver el laberinto
ledBlink(2);
mientras (digitalRead(buttonPin) {}
pathIndex = 0;
estado = 0;
mazeOptimization(); Segundo paso: ejecutar el laberinto tan rápido como sea posible
ledBlink(3);
mientras (digitalRead(buttonPin) {}
modo = parado;
estado = 0; 1 º paso
pathIndex = 0;
Longitud = 0;
}
Así, cuando termina el primer paso, lo que debemos hacer es sólo alimentar el robot con la matriz de trayectoria optimizada. Comenzará a correr y cuando se encuentra un cruce, ahora definirá lo que debe hacer basado en lo que se almacena en el [camino].
Para ordenar lo que debe ir, se creó una nueva función mazeTurn(path[]).
void mazeOptimization (void)
{
mientras (! estado)
{
readLFSsensors();
interruptor (modo)
{
caso FOLLOWING_LINE:
followingLine();
rotura;
caso CONT_LINE:
Si (pathIndex > = longitud) mazeEnd ();
Else {mazeTurn (path[pathIndex]); pathIndex ++;}
rotura;
caso LEFT_TURN:
Si (pathIndex > = longitud) mazeEnd ();
Else {mazeTurn (path[pathIndex]); pathIndex ++;}
rotura;
caso RIGHT_TURN:
Si (pathIndex > = longitud) mazeEnd ();
Else {mazeTurn (camino [pathIndex]); pathIndex ++;}
rotura;
}
}
}
La función mazeTurn (path[]) será:
void mazeTurn (char dir)
{
Switch(dir)
{
caso 'L': / / girar a la izquierda
goAndTurn (a la izquierda, 90);
rotura;
caso 'R': / / girar a la derecha
goAndTurn (derecho, 90);
rotura;
caso 'B': / / vuelta
goAndTurn (la derecha, 800);
rotura;
de caso ': / / ir recto
runExtraInch();
rotura;
}
}
El segundo paso se hace!
El siguiente video muestra que el ejemplo completo trabajado aquí, primero y segundo paso:
El código de Arduino en este Instructable a continuación: