Stap 8: Tweede Pass: de doolhof zo snel mogelijk op te lossen!
Het hoofdprogramma: lus is eenvoudig als dat:
void loop
{
ledBlink(1);
readLFSsensors();
mazeSolve(); First-pass-oplossen van de doolhof
ledBlink(2);
terwijl (digitalRead(buttonPin) {}
pathIndex = 0;
status = 0;
mazeOptimization(); Tweede Pass: run zo snel mogelijk de doolhof
ledBlink(3);
terwijl (digitalRead(buttonPin) {}
modus = gestopt;
status = 0; 1ste pass
pathIndex = 0;
pathLength = 0;
}
Dus, na afloop van de First-Pass wat we moeten doen is alleen voeden de robot met de geoptimaliseerde pad array. Het zal beginnen lopen en wanneer een kruispunt wordt gevonden, zal het nu definiëren wat te doen op basis op wat het is opgeslagen op pad [].
Bevel wat te gaan, is een nieuwe functie mazeTurn(path[])gemaakt.
VOID mazeOptimization (void)
{
terwijl (! status)
{
readLFSsensors();
schakelaar (modus)
{
Case FOLLOWING_LINE:
followingLine();
breken;
Case CONT_LINE:
Als (pathIndex > = pathLength) mazeEnd ();
else {mazeTurn (path[pathIndex]); pathIndex ++;}
breken;
Case LEFT_TURN:
Als (pathIndex > = pathLength) mazeEnd ();
else {mazeTurn (path[pathIndex]); pathIndex ++;}
breken;
Case RIGHT_TURN:
Als (pathIndex > = pathLength) mazeEnd ();
else {mazeTurn (pad [pathIndex]); pathIndex ++;}
breken;
}
}
}
De functie mazeTurn (path[]) zal worden:
VOID mazeTurn (char dir)
{
switch(dir)
{
geval 'L': / / linksaf
goAndTurn (LEFT, 90);
breken;
kast 'R': / / rechtsaf
goAndTurn (recht, 90);
breken;
Case "B": / / weer
goAndTurn (recht, 800);
breken;
geval van ': / / Go Straight
runExtraInch();
breken;
}
}
De tweede stap is gedaan!
De video hieronder toont dat het volledige voorbeeld werkte hier, eerste en tweede pass:
De code van de Arduino gebruikt op dit Instructable balg: