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.

All wikipages