Hardwarenahe Programmierung
Button Klasse
Nachfolgend eine Klasse (oder Struktur) für einen einfachen Button (Taster):
mbedESP32_blueLeds-Button-Class.ino
#define LED1 19 // GPIO19 #define CENTER 25 // GPIO25 class Button { // oder struct public: const uint8_t PIN; uint32_t numberKeyPresses; bool pressed; }; Button button1 = {CENTER, 0, false}; void IRAM_ATTR isr() { digitalWrite(LED1, !digitalRead(LED1)); button1.numberKeyPresses += 1; button1.pressed = true; } void setup() { Serial.begin(115200); pinMode(LED1, OUTPUT); pinMode(button1.PIN, INPUT_PULLDOWN); attachInterrupt(button1.PIN, isr, FALLING); } void loop() { if (button1.pressed) { Serial.printf("Button 1 has been pressed %u times\n", button1.numberKeyPresses); button1.pressed = false; } }
- In Zeile 4 wird eine Struktur oder Klasse (class) mit dem Namen Button erstellt.
- Zeile 6-8: hat die Klasse drei Mitglieder: PIN-Nummer, Anzahl der Tastendrücke und gedrückter Zustand. Struc bzw. Class ist die Sammlung von Variablen unterschiedlichen Typs (aber logisch miteinander verbunden) - in Klassen auch Methoden (Funktionen) unter einem gemeinsamen Namen.
- In Zeile 11 wird eine Instanz button1 der Klasse Button mit der Initialisierung Pin=CENTER, Anzahl=0 und Zustand=false erzeugt
- Ab Zeile 13 ist wieder die ISR mit dem Attribut IRAM_ATTR
- Zeile 20 wird die Ausgabe auf die Serielle Schnittstelle mit 115200 Baud festgelegt.
- In Zeile 21 und 22 in der setup () -Funktion wird die pinMode () -Funktion verwendet, um den button1-Pin als INPUT und den LED1-Pin als OUTPUT zu initialisieren.
- In Zeile 23 wird die ISR handleExIntCenter an den GPIO-Pin CENTER mit dem Modus der steigenden Flanke gebunden.
- In Zeile 27 in der loop-Funktion wird immer überprüft ob der button1 (CENTER) gedrückt wurde. Wenn ja wird die Anzahl auf die serielle Schnittstelle ausgegeben und die boolsche Variable pressed wieder zurück gesetzt.