Stap 6: De CODE
De codering is een uitdaging, omdat de DTMF code voor slechts één cijfer tegelijk kunt genereren.
Het probleem was dat codeert voor de handmatige modus, waar ik had een sleutel voor het overschakelen naar de handmatige modus te definiëren. Ik zal uitleggen met een voorbeeld:-
void loop
{
int z = digitalRead(d0);
int y = digitalRead(d1);
int x = digitalRead(d2);
int w = digitalRead(d3);
Als ((w == LOW) & &(x == LOW) & &(y == LOW) & &(z == HIGH)) d.w.z. cijfer 1
Als ((w == LOW) & &(x == LOW) & &(y == HIGH) & &(z == LOW)) d.w.z. cijfers 2
De code zou moeten werken als volgt:-als 1 is ingedrukt, de robot in de handmatige modus gaat en door op 2 te drukken op het toetsenbord de robot vooruit gaat. Maar wat gebeurt er eigenlijk is dat als ik druk op 2 de robot niet langer in de handmatige modus. WAAROM???
Het antwoord is dat de staat bij de pinnen van de Arduino aangesloten op de DTMF nu zijn gewijzigd, dat wil zeggen ze zijn niet langer 1, omdat de statusinformatie nergens opgeslagen wordt (omdat de staat zich moet veranderen wanneer de robot autonome modus wordt ingeschakeld en de DTMF ook alleen code voor laatste ingedrukte toets kunt genereren en kan niet worden opgeslagen de code zelf).
DE oplossing:-de oplossing was simpel, in plaats van een voorwaarde voor een aantal, voor het schakelen tussen de modus plaatsen, had ik het geplaatst voor een cijfer:-
Voorbeeld:-
if(w == low)
{
Als ((w == LOW) & &(x == LOW) & &(y == HIGH) & &(z == LOW))
{
digitalWrite (motorL1, hoge);
digitalWrite (motorL2, laag);
digitalWrite (motorR1, hoge);
digitalWrite (motorR2, laag);
}
Als ((w == LOW) & &(x == HIGH) & &(y == LOW) & &(z == HIGH))
{
digitalWrite (motorL1, laag);
digitalWrite (motorL2, hoge);
digitalWrite (motorR1, laag);
digitalWrite (motorR2, hoge);
}
Als ((w == LOW) & &(x == HIGH) & &(y == LOW) & &(z == LOW))
{
digitalWrite (motorL1, laag);
digitalWrite (motorL2, hoge);
digitalWrite (motorR1, hoge);
digitalWrite (motorR2, laag);
}
Als ((w == LOW) & &(x == HIGH) & &(y == HIGH) & &(z == LOW))
{
digitalWrite (motorL1, hoge);
digitalWrite (motorL2, laag);
digitalWrite (motorR1, laag);
digitalWrite (motorR2, hoge);
}
Als ((w == LOW) & &(x == HIGH) & &(y == HIGH) & &(z == HIGH))
{
digitalWrite (motorL1, laag);
digitalWrite (motorL2, laag);
digitalWrite (motorR1, laag);
digitalWrite (motorR2, laag);
}
}
AANGEZIEN 'W' DE BOVENSTAANDE CIJFERS ALTIJD LAAG BLIJVEN ZAL, ZAL DE W = 0 VOORWAARDE GELDEN IN DE GEHELE.