Stap 7: Codering het tot - Setup en lus
PIN wij de servo gekoppeld hebben aan. We zullen ook beginnen met de servo op 0 graden.
VOID Setup {}
pinMode (button1, INPUT);
pinMode (button2, INPUT);
pinMode (button3, INPUT);
pinMode (button4, INPUT);
pinMode (button5, INPUT);
pinMode (rood, OUTPUT);
pinMode (groen, uitvoer);
LCD.begin(16,2);
lcd.setCursor(0,0);
LCD.Print (": Voer:");
Serial.begin(9600); / / Voor debug. Zie visueel de knooppersen.
myservo.attach(9);
myservo.write(0);
}
Beginnen met het lezen van de staat van de pinnen.
void loop {}
gebracht1 = digitalRead(button1);
State2 = digitalRead(button2);
state3 = digitalRead(button3);
staat vallen4 = digitalRead(button4);
state5 = digitalRead(button5);
Als de status van de knop niet gelijk is aan zijn vorige staat (1 = hoog, 0 = laag), die in principe
betekent, werd het gewoon ingedrukt of losgelaten? Als de status van de knop hoog (1 is)
We verhogen de telling van die knop.
Als (gebracht1! = prev1) {}
delay(10);
Als (gebracht1 == HIGH) {}
count1 ++;
}
/ / Let op de delay(10). Dit is belangrijk. Het vergemakkelijkt een ontdendering. Knoppen hebben een intert
bounciness. Je kunt niet het voelen, maar wanneer u op een knop drukt, maakt het soms
meerdere malen contact, en de Arduino zal zien dat als meerdere persen. De vertraging
Hiermee onderbreekt u het programma voor 10 milliseconden, waardoor de knop om te "regelen", en vervolgens
wordt hervat. 10 milliseconden moeten lang genoeg zijn, maar meer aanpassen indien nodig.
else {}
}
Wij doen dat voor elke knop.
Als (state2! = prev2) {}
delay(10);
Als (state2 == HIGH) {}
count2 ++;
}
else {}
}
Als (state3! = prev3) {}
delay(10);
Als (state3 == HIGH) {}
count3 ++;
}
else {}
}
Als (staat vallen4! = prev4) {}
delay(10);
Als (staat vallen4 == HIGH) {}
count4 ++;
}
else {}
}
Als (state5! = prev5) {}
delay(10);
Als (state5 == HIGH) {}
count5 ++;
}
else {}
}
Dit zal helpen met het bijhouden van wat soort acties zijn gaande met
de knoppen. Wanneer de knop wordt ingedrukt, de staat komt niet overeen met
het is vorige staat, met vermelding van een verandering. Hier zetten we de vorige
staat voor de huidige toestand, zodat het moment je duwen of
release, de Arduino weet het, en dienovereenkomstig handelt.
prev1 = gebracht1;
prev2 = state2;
prev3 = state3;
prev4 = staat vallen4;
prev5 = state5;
Toen we de aantekening de omhoog hoe vaak elke knop werd ingedrukt.
totalCount = count1 + count2 + count3 + count4 + count5;
/ / Dit is waar we schrijven een sterretje ("*") op het LCD-telkens wanneer een knop is ingedrukt.
voor (rijen = 0; rijen < totalcount; rijen + 1) {}
lcd.setCursor(rows,1);
LCD.Print("*");
rijen ++;
}
"rijen" is waar de cursor is (van links naar rechts) op het LCD-scherm.
Telkens als een knop is ingedrukt, verhogen we "rijen" met één, en
ingesteld dat als de locatie van de cursor. Dit doen we tot op zekere hoogte (5)
want dat is hoeveel cijfers zijn in onze combinatie.
/ / Nu, als onze totalcount 5 bereikt, zullen we gaan kijken hoe vele malen
elke knop werd ingedrukt. Als het overeenkomt met wat onze vooraf bepaalde combo...
Als (totalcount == 5) {}
Als (count1 == 2 & & count2 == 0 & & count3 == 1 & & count4 == 2 & & count5 == 0) {}
LCD.Clear();
LCD.Print ("CODE GEACCEPTEERDE"); / / Code geaccepteerd!
myservo.write(90); / / de servo verplaatst naar 90 graden, alsof het ontgrendelen van een deur.
digitalWrite (groen, hoog); / / groene gelijk goed, dus de groene LED brandt
Zorg ervoor dat de rode die LED blijft uit, als je niet de code rechts de eerste keer krijgt
digitalWrite (rood, laag);
count1 = 0; / / Alle onze conunters teruggesteld aan 0, begint het proces opnieuw.
count2 = 0;
count3 = 0;
count4 = 0;
count5 = 0;
totalCount = 0;
delay(10000);
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print (": Voer:"); En we zijn terug aan het begin.
myservo.write(0);
digitalWrite (groen, lage);
}
else if (count1! = 2 & & count2! = 0 & & count3! = 1 & & count4! = 2 & & count5! = 0 & & totalcount == 5) {}
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print ('CODE geweigerd'); / / Dit en het deel hieronder zijn waar als de telling van elke knop
digitalWrite (rood, hoge); / / niet gelijk is aan de vooraf vastgestelde tellen, of als het groter dan de graaf is,
digitalWrite (groen, lage); //and het aantal totale persen is gelijk aan 5 (waaruit blijkt dat een 5 cijfer
count1 = 0; / / combinatie is ingevoerd maar klopt) en vervolgens de code is verworpen. Verworpen!
count2 = 0;
count3 = 0;
count4 = 0;
count5 = 0;
totalCount = 0;
delay(5000);
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print (": Voer:");
digitalWrite (rood, laag);
}
anders als (count1 > 2 & & count2 > 0 & & count3 > 1 & & count4 > 2 & & count5 > 0 || totalcount == 5) {}
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print ('CODE geweigerd');
digitalWrite (rood, hoge);
digitalWrite (groen, lage);
count1 = 0;
count2 = 0;
count3 = 0;
count4 = 0;
count5 = 0;
totalCount = 0;
delay(5000);
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print (": Voer:");
digitalWrite (rood, laag);
}
}
}