MANUELL / AUTONOM kontroll ROBOT (med SENSOR FUSION teknik) (6 / 12 steg)
Steg 6: Koden
Kodningen var en utmaning, eftersom DTMF kan generera kod för endast en siffra i taget.
Problemet var kodning för det manuella läget där jag var tvungen att definiera en nyckel för att växla manuellt läge. Jag kommer att förklara med ett exempel:-
void loop()
{
int z = digitalRead(d0);
int y = digitalRead(d1);
int x = digitalRead(d2);
int w = digitalRead(d3);
om ((w == LOW) & &(x == LOW) & &(y == LOW) & &(z == HIGH)) dvs siffran 1
om ((w == LOW) & &(x == LOW) & &(y == HIGH) & &(z == LOW)) dvs siffran 2
Koden bör fungera så här:-om 1 trycks, roboten går in i manuellt läge och genom att trycka 2 på knappsatsen roboten rör sig framåt. Men vad som egentligen händer är att när jag trycker på 2 roboten inte längre i manuellt läge. Varför???
Svaret är att staten på stiften av Arduino ansluten till DTMF har bytt nu, dvs de är inte längre 1, eftersom den statliga inte lagras någonstans (eftersom staten har att ändra när roboten kopplas till autonoma läge och DTMF också kan generera endast kod för sista pressande nyckel och kan inte lagra själva koden).
LÖSNINGEN:-lösningen var enkel, i stället för att placera en förutsättning för ett antal, för att växla läge, jag hade lagt det för en siffra:-
Exempel:-
IF(w == low)
{
om ((w == LOW) & &(x == LOW) & &(y == HIGH) & &(z == LOW))
{
digitalWrite (motorL1, hög);
digitalWrite (motorL2, låg);
digitalWrite (motorR1, hög);
digitalWrite (motorR2, låg);
}
om ((w == LOW) & &(x == HIGH) & &(y == LOW) & &(z == HIGH))
{
digitalWrite (motorL1, låg);
digitalWrite (motorL2, hög);
digitalWrite (motorR1, låg);
digitalWrite (motorR2, hög);
}
om ((w == LOW) & &(x == HIGH) & &(y == LOW) & &(z == LOW))
{
digitalWrite (motorL1, låg);
digitalWrite (motorL2, hög);
digitalWrite (motorR1, hög);
digitalWrite (motorR2, låg);
}
om ((w == LOW) & &(x == HIGH) & &(y == HIGH) & &(z == LOW))
{
digitalWrite (motorL1, hög);
digitalWrite (motorL2, låg);
digitalWrite (motorR1, låg);
digitalWrite (motorR2, hög);
}
om ((w == LOW) & &(x == HIGH) & &(y == HIGH) & &(z == HIGH))
{
digitalWrite (motorL1, låg);
digitalWrite (motorL2, låg);
digitalWrite (motorR1, låg);
digitalWrite (motorR2, låg);
}
}
EFTERSOM "W" HÅLLER SIG ALLTID LÅG DE OVANSTÅENDE SIFFRORNA, BLIR W = 0 VILLKOR SANT I HELA.