Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
You are viewing an older revision! See the latest version
Joystick Blue LEDs
Polling¶
Nachfolgend ein einfache Code, der zum Lesen des Status eines Tasters (drücken des Joysticks) oder eines beliebigen Schalters verwendet wird:
mbedESP32_blueLeds-Joystick-Polling.ino
#define LED1 19 // GPIO19 #define CENTER 25 // GPIO25 void setup(){ pinMode(LED1, OUTPUT); pinMode(CENTER, INPUT); } void loop() { int center_state = digitalRead(CENTER); if ( center_state == HIGH ) { digitalWrite(LED1, HIGH); } else { digitalWrite(LED1, LOW); } }
- Zeile 1 und 2 geben dem Eingangs-Pin 25 den Namen CENTER und dem Ausgangs-Pin 19 LED1. Im Code werden diese Namen anstelle der PIN-Nummern verwendet.
- Zeile 5 und 6 in der setup () -Funktion wird die pinMode () -Funktion verwendet, um den CENTER-Pin als INPUT und den LED1-Pin als OUTPUT zu initialisieren.
- In Zeile 11 der Funktion loop () liest die Funktion digitalRead den Status des Tasters CENTER und speichert den Wert in der Variablen center_state.
- In Zeile 12 wird der Status der Variablen center_state überprüft. Wenn center_state den Ausgang HIGH liefert, wird die LED1 ausgeschaltet und bleibt ansonsten eingeschaltet.
Interrupt¶
Mit einem ESP32 Bord können alle GPIO-Pins als Interrupt-Anforderungseingänge konfiguriert werden. im ESP32 wird eine Interrupt-Serviceroutine (ISR) definiert, die aufgerufen wird, wenn ein GPIO-Pin seinen Signalwert ändert:
mbedESP32_blueLeds-Joystick-ISR.ino
#define LED1 19 // GPIO19 #define CENTER 25 // GPIO25 void IRAM_ATTR handleExIntCenter() { digitalWrite(LED1, !digitalRead(LED1)); } void setup() { pinMode(LED1, OUTPUT); pinMode(CENTER, INPUT_PULLDOWN); attachInterrupt(digitalPinToInterrupt(CENTER), handleExIntCenter, RISING); } void loop() { }
- In Zeile 11 wird die ISR handleExIntCenter an den GPIO-Pin CENTER mit dem Modus der steigenden Flanke gebunden. Mit detachInterrupt(GPIO-Pin); kann der Interrupt wieder vom GPIO-Pin getrennt werden.
- In Zeile 4 wird die ISR Funktion mit speziellem Attribut IRAM_ATTR festgelegt.
- In Zeile 5 ist der ISR Körper mit den auszuführenden Instruktionen, hier LED1 umschalten
- Beachte in Zeile 14 die leere loop-Funktion. Warum?
Mit dem IRAM_ATTR wird der kompilierte Code im internen RAM (IRAM) des ESP32 abgelegt wird - schnellere Ausführung.
Siehe auch