Schaltlogik einer Toggleswitch
In den meisten Bausätzen für Arduinos stehen keine Schiebeschalter zur Verfügung, sondern nur Taster. Wir gehen davon aus, dass man mit so einem Taster auf Masse schaltet und der damit erreichte Zustand soll erhalten bleiben. Man kann damit zum Beispiel eine LED oder ein Relais schalten. Auf jeden Tastendruck ändert sich der Ausgangszustand zwischen on und off. Das nennt man toggeln.
Material:
- Arduino
- Taster
- Breadboard
Den Taster legen wir an einer Seite auf Masse und die andere Seite verbinden wir mit D11 des Arduino. Als Anzeige kommt die LED_BUILTIN zum Einsatz.
Variablen:
- Tswitch – Variable, die den Zustand des Tasters liest
- onoff – zu toggelnde Variable, die gleichzeitig zum Steuern der LED verwendet werden kann
- oldonoff – der jeweils vorherige Zustand
- toggletimer – gibt die minimale Zeit zwischen zwei Togglevorgängen vor
Diagramm:
I: Das ist die Ausgangssituation, wo die LED an ist und der Taster nicht gedrückt. Oldonoff ist so gesetzt, dass es sich von onoff unterscheidet und die Schaltung ist somit bereit zum Umschalten (Toggeln).
II: Der Taster wird betätigt. Das kann mehrmals geschehen, aber die Umschaltung erfolgt nur einmal. Dafür sorgt der Toggletimer, der nach einem Umschaltvorgang 2 sec abwartet, bis er oldonoff wieder verschieden macht von onoff und somit einen erneuten Umschaltvorgang erst ermöglicht.
III. Nach einer Zeit größer als zwei Sekunden, kann der Umschaltvorgang wieder ausgelöst werden.
IV. Oldonoff wird wieder für zwei Sekunden gehalten und ist gleich onoff, sodass noch kein neuer Umschaltvorgang ausgelöst werden kann.
V. Wir der Taster permanent gedrückt, schaltet die LED immer zwischen an und aus im Zweisekundentakt hin und her. Die Timerzeit sollte also auch nicht zu klein gewählt werden, wenn das nicht erwünscht ist.
Programmbeispiel:
/* www.beerlecada.com Program for a toggle switch Author: Christian Rempel Licence: one glass of red wine, when you meet me Date: 22/07/26 */ #define Taster 11 // Taster Pumpe bool onoff = true;// die LED ist am Anfang an bool oldonoff = false;// diese Kombination bestimmt den Startzustand // soll die LED am Anfang aus sein, ist zu setzen: //bool onoff = false; //bool oldonoff = true; long toggletimer; void setup() { pinMode(LED_BUILTIN, OUTPUT); pinMode(Taster, INPUT_PULLUP); toggletimer = millis(); } void loop() { digitalWrite(LED_BUILTIN, onoff); // toggle the LED status with the microswitch if (digitalRead(Taster) == LOW && onoff != oldonoff) { onoff = !onoff; // secure that toggling happens only once oldonoff = onoff; toggletimer = millis(); } // dead time is two seconds if (millis() - toggletimer > 2000) // after two seconds toggling is allowed again oldonoff = !oldonoff; }