Hur komma åt 5 knappar genom 1 Arduino ingång (6 / 8 steg)
Steg 6: Kodning det.
Du kan ladda ner den bifogade skissen. Det är faktiskt ganska enkelt. Det första avsnittet ställer in alla variabler och konstanter som vi använder.
CONST int buttonPin = 0; numrera av tryckknappar pin
CONST int ledPin = 13. antal LED PIN-koden för testning
Ovanstående ställer bara in stiften används. Måste du ställa in varje knapp och intervallet med värden för knappen:
CONST int Knapp1 = 1;
...
CONST int BUTTON1LOW = 970;
CONST int BUTTON1HIGH = 1024;
...
I uppsättning, vi bara in de pin staterna och starta serieport (vilken knapp trycks skrivs till seriell utgång):
pinMode (buttonPin, ingång);
pinMode (ledPin, produktionen);
Serial.BEGIN(9600);
Sedan får vi till intressanta. Den första delen av programmet slingan är där magiskt händer faktiskt, men helt enkelt kontrollerar den vilken knapp var läsa utifrån värdet vi fick från analogRead():
int läsa = analogRead(buttonPin); om (läst > BUTTON5LOW & & läsning //Read switch 5
int tmpButtonState = låg; den nuvarande behandlingen från ingångsstiftet
tmpButtonState = BUTTON5;
} else om (läst > BUTTON4LOW & & läsning //Read switch 4
tmpButtonState = BUTTON4;
} else om
....
} annat {
Ingen knapp trycks;
tmpButtonState = låg;
}
Nästa del debounces bara tryck på knapp. I grund och botten utan detta tycks tryck på knappen en gång koden som flera pressar. Brukar detta skulle tillåta dig att använda knappen som en Vippbrytare också, men jag gör inte som.
Jag planerar att använda knapparna som reset knappar, så jag behöver bara att upptäcka när de skjuts och återställa en viss variabel. om ((millis()-lastDebounceTime) > debounceDelay) {
om (tmpButtonState! = lastButtonState) {
lastDebounceTime = millis();
}
buttonState = tmpButtonState;
}
lastButtonState = tmpButtonState;
Den sista delen av programmet är bara en switch-sats som utför olika kod baserad på vilken knapp trycktes. För att testa byta de alla bara på den inbyggda LED på stift 13.
Switch(buttonState) {
fall låg:
digitalWrite (ledPin, låg);
bryta;
fall Knapp1:
digitalWrite (ledPin, hög);
bryta;
...
}
Och det är i huvudsak hur lätt det är att styra flera knappar. Jag har inte genomfört detta i mitt projekt ännu, så jag kan göra ett bibliotek för det någon gång om jag behöver.