Zum Hauptinhalt springen

Die Taster

Bibliotheken des Herstellers Pololu

Für das einfache Auslesen der drei Taster A,B und C können die folgenden drei Klassen verwendet werden:

#include <Pololu3piPlus32U4.h>
using namespace Pololu3piPlus32U4;

// Mit den Taster-Klassen werden Taster-Objekte erzeugt ..
ButtonA buttonA;
ButtonB buttonB;
ButtonC buttonC;

Für jeden Taster gibt es verschieden Methoden, welche zum Beispiel

bool isPressed ()

Gibt true oder 1 zurück, wenn der entsprechende Taster gedrückt ist und false oder 0 wenn nicht. Der Taster wird nicht entprellt.

Beispielprogramm

#include <Pololu3piPlus32U4.h>
using namespace Pololu3piPlus32U4;

ButtonB buttonB;

void setup()
{ /* leer */}

void loop()
{
// `isPressed()` liest direkt, ohne zu entprellen
if (buttonB.isPressed()) // Wenn gedrückt ...
{
ledYellow(1);
}
else
{
ledYellow(0);
}
}

void waitForPress ()

Wartet bis der Taster gedrückt wurde. Berücksichtigt das Prellen der Taster.

void waitForRelease ()

Wartet bis der Taster losgelassen wurde. Berücksichtigt das Prellen der Taster.

void waitForButton ()

Wartet bis der Taster gedrückt und anschließend losgelassen wurde. Berücksichtigt das Prellen der Taster.

Beispielprogramm

#include <Pololu3piPlus32U4.h>      
using namespace Pololu3piPlus32U4;

ButtonA buttonA;
OLED lcd;

void setup()
{
lcd.clear();
lcd.print(F("Press A"));

/* Die Methode waitForButton() stoppt das Programm, bis
der Taster gedrückt und anschließend losgelassen wurde.*/
buttonA.waitForButton();

lcd.clear();
lcd.print("Danke");
}

void loop(){
// ohne Inhalt
}

bool getSingleDebouncedPress ()

Gibt immer dann true oder 1 zurück, wenn der Taster vom nicht gedrückten zum gedrückten Zustand gewechselt hat. Die Methode wird mit einem Zustandsdiagramm (state machine) realisiert und muss wiederkehrend aufgerufen werden. Bei jedem Aufruf wird unter Berücksichtigung des Prellens der Status des Tasters aktualisiert.

Beispielprogramm

#include <Pololu3piPlus32U4.h>      
using namespace Pololu3piPlus32U4;

ButtonC buttonC;
OLED lcd;

int cPressedCount = 0;

void setup()
{
// ohne Inhalt
}

void loop()
{
/* Wird die Methode getSingleDebouncedPress() regelmäßig in einer Schleife aufgerufen,
* so gibt sie true zurück, wenn der Taster gedrückt und false zurück, wenn der Taster
* nicht gedrückt ist. Die Methode ist nicht blockierend und entprellt den Taster*/
if (buttonC.getSingleDebouncedPress())
{
cPressedCount += 1;
Serial.print(F("Button C was pressed "));
Serial.print(cPressedCount);
Serial.println(F(" times."));

lcd.clear();
lcd.print(cPressedCount);
}

/* Wenn nicht blockierende Methoden wie isPressed() oder
* getSingleDebouncedPress() verwendet werden, können mehrere Taster zu gleichen
* Zeit verwendet werden und außerdem noch andere Aufgaben zu gleichen Zeit
* ausgeführt werden. In diesem Beispiel blinkt die rote LED, während der Taster C
* regelmäßig abgefragt wird. */
ledRed(millis() % 1024 < 100); // "Hackerstyle" zum Blinken der LED
}

bool getSingleDebouncedRelease ()

Gibt immer dann true oder 1 zurück, wenn der Taster vom gedrückten zum nicht gedrückten Zustand gewechselt hat. Die Methode wird mit einem Zustandsdiagramm (state machine) realisiert und muss wiederkehrend aufgerufen werden. Bei jedem Aufruf wird unter Berücksichtigung des Prellens der Status des Tasters aktualisiert.