Super enkla Arduino knappsatsen (den hårda vägen) (7 / 8 steg)
Steg 7: Kodning det upp - Setup och Loop
PIN-kod vi har servo bifogas. Vi kommer även börja med servo vid 0 grader.
void setup() {
pinMode (Knapp1, ingång);
pinMode (button2, ingång);
pinMode (button3, ingång);
pinMode (button4, ingång);
pinMode (button5, ingång);
pinMode (röd, produktionen);
pinMode (grön, utgång);
LCD.BEGIN(16,2);
lcd.setCursor(0,0);
LCD.Print (": Ange kod:");
Serial.BEGIN(9600); / / För debug. Visuellt se knapptryckningar.
myservo.attach(9);
myservo.write(0);
}
Börja med att läsa statligt av stiften.
void loop() {
state1 = digitalRead(button1);
state2 = digitalRead(button2);
state3 = digitalRead(button3);
state4 = digitalRead(button4);
state5 = digitalRead(button5);
Om tillståndet för knappen inte är lika med sin tidigare tillstånd (1 = hög, 0 = låg), som i princip
innebär, var det bara trycks ned och släpps? Om knappen är hög (1)
Vi ökar värdet greven av knappen.
om (state1! = prev1) {
Delay(10);
om (state1 == hög) {
count1 ++;
}
/ / Obs delay(10). Detta är viktigt. Det underlättar en debounce. Knapparna har ett intert
bounciness. Du kan inte känna det, men när du trycker på en knapp, gör ibland
Kontakta mer än en gång och Arduino ser detta som flera pressar. Förseningen
pausar programmet för 10 millisekunder, vilket gör att knappen för att "lösa", och sedan
meritförteckningar. 10 millisekunder bör vara lång nog, men längre justera om det behövs.
annat {}
}
Vi gör det för varje knapp.
om (state2! = prev2) {
Delay(10);
om (state2 == hög) {
count2 ++;
}
annat {}
}
om (state3! = prev3) {
Delay(10);
om (state3 == hög) {
count3 ++;
}
annat {}
}
om (state4! = prev4) {
Delay(10);
om (state4 == hög) {
count4 ++;
}
annat {}
}
om (state5! = prev5) {
Delay(10);
om (state5 == hög) {
count5 ++;
}
annat {}
}
Detta kommer att hjälpa hålla reda på vad typ av åtgärder händer med
knapparna. När knappen trycks, matchar sitt tillstånd inte
Det är tidigare tillstånd, som visar en förändring. Här satt vi den tidigare
Ange att det nuvarande läget, så att ögonblicket du trycka eller
release, Arduino vet det, och agerar därefter.
prev1 = state1;
prev2 = state2;
prev3 = state3;
prev4 = state4;
prev5 = state5;
Då vi räkna upp hur många gånger varje knapp trycktes.
totalCount = count1 + count2 + count3 + count4 + count5;
Det är här vi skriver en asterisk ("*") till LCD-skärmen varje gång en knapp trycks.
för (rader = 0; rader < totalcount; rader + 1) {
lcd.setCursor(rows,1);
LCD.Print("*");
rader ++;
}
"rader" är där markören är (vänster till höger) på LCD-skärmen.
För varje gång en knapp trycks ner, vi ökas "rader" med ett, och
Ange som som markören plats. Vi gör detta till en viss punkt (5)
eftersom det är hur många siffror är i vår kombination.
Nu, om våra totalcount når 5, vi börjar titta på hur många gånger
varje knapp trycktes in. Om det matchar vad våra förutbestämda combo...
om (totalcount == 5) {
om (count1 == 2 & & count2 == 0 & & count3 == 1 & & count4 == 2 & & count5 == 0) {
LCD.Clear();
LCD.Print ("kod ACCEPTERADE"); / / Kod accepterade!
myservo.write(90); / / servo flyttas till 90 grader, som om låsa upp en dörr.
digitalWrite (grön, hög); / / grön är lika med bra, alltså den gröna lampan är på
se till att den röda LED blir bort om du inte få koden rätt första gången
digitalWrite (röd, låg);
count1 = 0; / / Reset all vår conunters till 0, börjar processen om igen.
count2 = 0;
count3 = 0;
count4 = 0;
count5 = 0;
totalCount = 0;
Delay(10000);
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print (": Ange kod:"); Och vi är i början.
myservo.write(0);
digitalWrite (grön, låg);
}
annars om (count1! = 2 & & count2! = 0 & & count3! = 1 & & count4! = 2 & & count5! = 0 & & totalcount == 5) {
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print ("kod avvisad"); / / Detta och delen nedan är där om greven av varje knapp
digitalWrite (röd, hög); / / är inte lika förutbestämda räkningen, eller om det är större än antalet,
digitalWrite (grön, låg); //and antalet totala pressar är lika med 5 (som anger att ett 5 siffrigt
count1 = 0; / / kombination angavs men är fel) då koden avvisas. Avvisade!
count2 = 0;
count3 = 0;
count4 = 0;
count5 = 0;
totalCount = 0;
Delay(5000);
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print (": Ange kod:");
digitalWrite (röd, låg);
}
annars om (count1 > 2 & & count2 > 0 & & count3 > 1 & & count4 > 2 & & count5 > 0 || totalcount == 5) {
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print ("kod avvisad");
digitalWrite (röd, hög);
digitalWrite (grön, låg);
count1 = 0;
count2 = 0;
count3 = 0;
count4 = 0;
count5 = 0;
totalCount = 0;
Delay(5000);
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print (": Ange kod:");
digitalWrite (röd, låg);
}
}
}