Das Programm liest den Zustand eines Buttons am mBot aus. Wenn der Button gedrückt wird (analoges Signal unterhalb eines Schwellenwerts von 500), gibt es „Button Pressed“ über die serielle Schnittstelle aus. Die Abfrage erfolgt alle 50 ms in einer Schleife.
Listing 1:MinimalesProgramm.ino
#include <MeMCore.h> int PIN_BUTTON = 7; // must be fixed! int threshold = 500; // Analoger Schwellenwert! void setup() { Serial.begin(9600); pinMode(PIN_BUTTON, INPUT); //Define button pin as input } void loop() { if ( isButtonPressed() ){ Serial.println("Button Pressed"); } delay(50); } bool isButtonPressed(){ if (analogRead(PIN_BUTTON) < threshold) return true; return false; }
Diese Variante von isButtonPressed()
erkennt zwar den Tastendruck, aber sie gibt bei jedem Schleifendurchlauf true
zurück, solange der Knopf gehalten wird. Dadurch wird der Tastendruck mehrfach gezählt, was zu unerwünschtem Verhalten führt. Eine bessere Lösung speichert den vorherigen Zustand des Knopfes, sodass ein Tastendruck nur einmal erkannt wird und erst nach dem Loslassen erneut registriert werden kann.
Die Funktion erkennt, ob der Taster neu gedrückt wurde und verhindert mehrfaches Zählen, solange der Knopf gehalten wird.
Listing 1:MinimalesProgramm.ino
bool isButtonPressed() { static bool buttonPressed = false; int value = analogRead(PIN_BUTTON); if (value < threshold) { if (!buttonPressed) { buttonPressed = true; return true; } } else { buttonPressed = false; // Button wurde losgelassen } return false; }
analogRead(PIN_BUTTON)
)!buttonPressed
)buttonPressed = true
und gibt einmal true
zurückvalue >= threshold
), wird buttonPressed = false
buttonPressed
verwendet!Vorteile