Buttons

Dieses Lab zeigt Ihnen wie sie einen Taster als User Input nutzen können.

Vorkenntnisse:

Ziel:

  • Button mit MCU verbinden (Pullup/Pulldown).
  • Zustand eines Tasters einlesen

Taster (Push Button)

Ein Taster, nicht zu verwechseln mit einem Schalter ist ein mechanisches Bauteil, welches als Eingang für einen Microcontroller genutzt werden kann.

Aufbau

Aufbau für Button LAB

Zustand einlesen

from machine import Pin
btn = Pin(27, Pin.IN, Pin.PULL_UP)

while True:
    current_btn_state = btn.value()
    print(current_btn_state)

Der Ausdruck Pin.PULL_UP aktiviert den internen Pullup-Widerstand des ESP32.

Dadurch liegt ein HIGH-Pegel am Pin an, wenn der Taster nicht gedrückt ist und ein LOW-Pegel wenn der Taster gedrückt wird.

Warning

Ein Taster sollte immer mit einem Pullup oder Pulldown Widerstand verwendet werden, da der Spannungszustand des Taster-Pins sonst nicht stabil ist und der Zustand des Eingangspings sich zufällig ändern kann.

Task

Schreiben Sie ein Programm welches eine LED einschaltet solange der Taster gedrückt ist. Und die LED wieder ausschaltet falls der Taster nicht mehr gedrückt ist.

Solution

from machine import Pin
led = Pin(14, Pin.OUT)
btn = Pin(27, Pin.IN, Pin.PULL_UP)

while True:
    if 0 == btn.value():
        led.on()
    else:
        led.off()

Wokwi

Tastendruck erkennen

Nun wollen wir nicht immer den Taster gedrückt halten nur damit unsere LED leuchtet. Wir brauchen also eine Möglichkeit zu erkennen ob der Taster gedrückt wurde.

flowchart TB
    setup["`**Setup** Pins and
    init *last* state to HIGH `"]
    check["`Check *current* button state`"]
    if_edge{" "}
    do["`set *last* state = *current* state`"]
    if_falling{"is current state LOW"}
    toggle["`*toggle LED*`"]

    setup --> check
    check --> if_edge
    if_edge -- last != current --> check
    if_edge -- last == current --> do
    do --> if_falling
    if_falling -- true --> toggle
    if_falling -- false --> check

Task

Betrachten Sie folgendes Diagram1 welches den Ablauf darstellt. Versuchen Sie dies in Code umzusetzen.

Solution

from machine import Pin

led = Pin(14, Pin.OUT)
btn = Pin(27, Pin.IN, Pin.PULL_UP)

# Set btn state to HIGH as btn is low active.
last_btn_state = 1

while True:
    current_btn_state = btn.value()
    if current_btn_state != last_btn_state:
        last_btn_state = current_btn_state
        if current_btn_state == 0:
            led.value(not led.value())

Kontrollfragen

  1. Was passiert, wenn ein Taster direkt (also ohne Pullup-Widerstand) mit dem Microkontroller verbunden wird.

  2. Ein Taster ist mit einem Pullup-Widerstand verbunden. Welches Level (HIGH oder LOW) liegt am Pin an, wenn der Taster offen bzw. geschlossen ist? Erläutern Sie Ihre Antwort.

  3. Ein Taster ist mit einen Pull-Down-Widerstand angeschlossen. Begründen Sie, welchen Zustand (Spannung) der angeschlossene Pin aufweist, wenn der Taster a) geschlossen und b) geöffnet ist.

1

Diese Art von Diagram wird auch als Ablaufdiagramm oder Flowchart Diagramm bezeichnet.