zurück

2 Schalter - 1 digitaler Pin

23.09.2019

In dem Beitrag "Viele Schalter - 1 Pin" wurden mehrere Taster an ein analogen Eingang des Arduino gelegt und eingelesen. Doch wenn man keinen analogen Pin mehr frei hat sondern nur einen digitalen, muss aber zwei Taster einlesen? Dann hilft folgender Trick:

Verwendete Bauteile

Aufbau und Funktionsweise der Schaltung

Aufbau der Schaltung

Jeder digitale Eingang vom Arduino besitzt einen internen Pull-Up-Widerstand von ca. 38kΩ. Der Taster S2 zieht das Signal beim Drücken auf LOW (0V). Der Taster S1 bekommt einen Widerstand vorgeschaltet von etwa 5x den Pull-Up-Widerstandswert des Arduinos, d.h. hier 220kΩ. Dadurch wird das Signal nicht mehr auf LOW gezogen werden, auch wenn der Pull-Up aktiviert ist. Wenn nun der Pull-Up ausgeschaltet wird, kann nun das Signal mit über einen weiteren externen Pull-Up gemessen werden, der wiederum deutlich größer ist als der 220kΩ-Widerstand. Hier wird 1MΩ verwendet. Um nun in der obigen Schaltung die beiden Taster S1 und S2 voneinander zu unterscheiden, müssen wir zwei bzw. drei Prüfungen im Sketch des Arduinos durchführen, um festzustellen, welcher der beiden Taster gerade gedrückt wurde.

Sketch


void loop()
{
    // with mode INPUT_PULLUP --> Button-1 can be detected
    // with mode INPUT        --> Button-1 OR Button-2 can be detected
    byte pressed = 0;
    pinMode(SWITCH, INPUT_PULLUP); // now a low signal can only mean Button-1 is pressed
    if (!digitalRead(SWITCH)) {
        pressed = 1;
    }
    else {
        pinMode(SWITCH, INPUT); // now a low signal could mean any button, but Button-1 was alrady checked ...
        if (!digitalRead(SWITCH)) {
            pressed = 2; // ... so it must be the Button-2 button
            pinMode(SWITCH, INPUT_PULLUP); // check if the Button-2 was pressed just in the meantime
            if (!digitalRead(SWITCH)) {
                pressed = 1;
            }
        };
    };
}