Megszámoljuk a gombnyomások számát.
Utolsó felülvizsgálat: 2022.02.04 16:50
Ha már működik egy nyomógomb, gyakran szeretne valamilyen műveletet végrehajtani aszerint, hogy hányszor lett megnyomva a gomb. Ehhez tudnia kell, hogy a gomb mikor vált kikapcsolt állapotról bekapcsolt állapotba, és számolja meg, hogy ez az állapotváltozás hányszor történik meg. Ezt állapotváltozás észlelésnek vagy élérzékelésnek nevezik. Ebben az oktatóanyagban megtanuljuk, hogyan ellenőrizhető az állapotváltozás, üzenetet küldünk a Soros Monitornak a megfelelő információkkal, és négy állapotváltozást számolunk a LED be- és kikapcsolásához.
Hardver szükséglet
Arduino kártya
Egy pillanatkapcsoló, gomb vagy billenőkapcsoló
10 kohm-os ellenállás
összekötő vezetékek
dugdosós próbapanel (breadboard)
Az áramkör

Csatlakoztasson három vezetéket a kártyához. Az első a nyomógomb egyik lábától egy lehúzó ellenálláson (itt 10 kohm) keresztül a földre megy. A második a nyomógomb megfelelő lábától az 5 voltos táphoz megy. A harmadik egy digitális I/O kivezetéshez csatlakozik (itt a 2. kivezetéshez), amely leolvassa a gomb állapotát.
Nyitott (nem lenyomott) nyomógomb esetén nincs kapcsolat a nyomógomb két lába között, így a kivezetést földeljük (a lehúzó ellenálláson keresztül) és LOW-t olvasunk. A gomb bezárásakor (lenyomva) összeköttetést hoz létre a két lába között, a kivezetést feszültségre köti, így HIGH-t olvasunk. (A kivezetés továbbra is a földre van kötve, de az ellenállás ellenáll az áram áramlásának, így a legkisebb ellenállás útja a +5 V-ig terjed.)
Ha mindenről leválasztja a digitális I/O érintkezőt, előfordulhat, hogy a LED hibásan villog. Ennek az az oka, hogy a bemenet "lebegő" - vagyis nem csatlakozik sem feszültséghez, sem földhöz. Többé-kevésbé véletlenszerűen ad vissza HIGH vagy LOW értéket. Ezért kell egy lehúzó ellenállás az áramkörben.
Vázlat

A kód
Az alábbi vázlat folyamatosan leolvassa a gomb állapotát. Ezután összehasonlítja a gomb állapotát a legutóbbi állapotával a fő ciklusban. Ha a gomb aktuális állapota eltér a legutóbbi gombállapottól, és az aktuális gombállapot HIGH, akkor a gomb kikapcsolt állapotról bekapcsolt állapotra váltott. A vázlat ezután növeli a gombnyomás-számlálót.
A vázlat a gombnyomás-számláló értékét is ellenőrzi, és ha ez a négy páros többszöröse, akkor a 13-as kivezetésen lévő LED-et bekapcsolja. Ellenkező esetben kikapcsolja.
/*
State change detection (edge detection)
Gyakran nem kell folyamatosan tudnod a digitális bemenet állapotát, de csak azt kell
tudni, hogy a bemenet mikor vált egyik állapotból a másikba.
Például tudni szeretné, hogy egy gomb mikor vált KI állásból BE állapotba. Ezt
állapotváltozás észlelésnek vagy élérzékelésnek nevezik.
Ez a példa bemutatja, hogyan észlelhető, ha egy gomb ki-be, illetve be-ki kapcsol.
Az áramkör:
- nyomógomb +5V-ról a 2-es kivezetésre csatlakoztatva
- 10 kohm-os ellenállás a 2-es kivezetésről a földre csatlakoztatva
- LED a 13-as kivezetéstől a földig 220 ohmos ellenálláson keresztül
(vagy használja a legtöbb Arduino kártyára beépített LED-et)
created 27 Sep 2005
modified 30 Aug 2011
by Tom Igoe
Ez a kód nyilvános.
https://docs.arduino.cc/built-in-examples/digital/StateChangeDetection
*/
// ezek az állandók nem változnak:
const int buttonPin = 2; // a nyomógomb kivezetés száma
const int ledPin = 13; // a LED kivezetés száma
// Variables will change:
int buttonPushCounter = 0; // a gombnyomások számának számlálója
int buttonState = 0; // a gomb aktuális állapota
int lastButtonState = 0; // a gomb előző állapota
void setup() {
// inicializálja a nyomógomb kivezetést bemenetként:
pinMode(buttonPin, INPUT);
// inicializálja a LED kivezetést kimenetként:
pinMode(ledPin, OUTPUT);
// inicializálja a soros kommunikációt:
Serial.begin(9600);
}
void loop() {
// olvassa el a nyomógomb beviteli kivezetését:
buttonState = digitalRead(buttonPin);
// összehasonlítja a buttonState-et az előző állapottal
if (buttonState != lastButtonState) {
// ha az állapot megváltozott, növeljük a számlálót
if (buttonState == HIGH) {
// ha az aktuális állapot HIGH akkor a gomb ki-ről be-re váltott:
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
} else {
// ha az aktuális állapot LOW akkor a gomb be-ről ki-re váltott:
Serial.println("off");
}
// Késleltessen egy kicsit, hogy elkerülje a pergést
delay(50);
}
// mentse el az aktuális állapotot utolsó állapotként, ez lesz a ciklusban következő alkalommal
lastButtonState = buttonState;
// négy gombnyomásonként bekapcsolja a LED-et a gombnyomás-számláló
// maradékának ellenőrzésével. a maradék függvény megadja
// a két szám osztásának maradékát:
if (buttonPushCounter % 4 == 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
Tudj meg többet
További alapvető oktatóanyagokat a beépített példák részben talál.
Felfedezheti a nyelvi referenciát is, az Arduino programozási nyelv részletes gyűjteményét.