Toggleswitch

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;
}

Zurück