Labyrint Problemlösaren Robot, med artificiell intelligens med Arduino (8 / 10 steg)
Steg 8: Andra Pass: lösa labyrinten så fort som möjligt!
Huvudprogrammet: loop, är enkla sådär:
void loop()
{
ledBlink(1);
readLFSsensors();
mazeSolve(); Första passet att lösa labyrinten
ledBlink(2);
samtidigt (digitalRead(buttonPin) {}
pathIndex = 0;
status = 0;
mazeOptimization(); Andra Pass: springa labyrinten så fort som möjligt
ledBlink(3);
samtidigt (digitalRead(buttonPin) {}
läge = stoppad;
status = 0; 1. passera
pathIndex = 0;
pathLength = 0;
}
Så, när första passet avslutas, vad vi måste göra det är bara foder roboten med optimerad sökvägen matrisen. Det kommer att börja springa och när en korsning finns, det nu kommer att definiera vad man ska göra baserat på vad det lagras på väg [].
För att kommandot vad gå, skapades en ny funktion mazeTurn(path[]).
void mazeOptimization (void)
{
medan (! status)
{
readLFSsensors();
Switch (läge)
{
fall FOLLOWING_LINE:
followingLine();
bryta;
fall CONT_LINE:
om (pathIndex > = pathLength) mazeEnd ();
annat {mazeTurn (path[pathIndex]); pathIndex ++;}
bryta;
fall LEFT_TURN:
om (pathIndex > = pathLength) mazeEnd ();
annat {mazeTurn (path[pathIndex]); pathIndex ++;}
bryta;
fall RIGHT_TURN:
om (pathIndex > = pathLength) mazeEnd ();
annat {mazeTurn (sökväg [pathIndex]); pathIndex ++;}
bryta;
}
}
}
Funktionen mazeTurn (path[]) kommer att vara:
void mazeTurn (char dir)
{
Switch(Dir)
{
ärende 'L': / / sväng vänster
goAndTurn (vänster, 90);
bryta;
"R" i mål: / / sväng höger
goAndTurn (rätt, 90).
bryta;
"B" i mål: / / slå tillbaka
goAndTurn (rätt, 800).
bryta;
fallet ": / / gå rakt
runExtraInch();
bryta;
}
}
Andra passet är gjort!
Den video nedan visar det fullständiga exemplet arbetade här, första och andra passet:
Nedan Arduino koden används på detta Instructable: