Benutzer-Werkzeuge

Webseiten-Werkzeuge


hello_mbot_button

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
hello_mbot_button [2025/02/03 11:42] torsten.roehlhello_mbot_button [2025/02/18 11:44] (aktuell) – [Bessere isButtonPressed() Variante] torsten.roehl
Zeile 1: Zeile 1:
 ====== Hello mBot Button ====== ====== Hello mBot Button ======
 +
 +//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.//
  
  
Zeile 9: Zeile 11:
 #include <MeMCore.h> #include <MeMCore.h>
  
-int PIN_BUTTON = 7;    // must be fixed! +int PIN_BUTTON = 7;   // must be fixed! 
-int threshold = 500;  // Analoger Schwellenwert!+int threshold  = 500; // Analoger Schwellenwert!
  
 void setup() { void setup() {
Zeile 29: Zeile 31:
     return true;         return true;    
   return false;   return false;
 +}
 +</Code>
 +
 +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. :-?
 +
 +==== Bessere isButtonPressed() Variante ====
 +
 + <WRAP center round tip 90%>
 +Die Funktion erkennt, ob der Taster **neu gedrückt** wurde und __verhindert mehrfaches Zählen__, solange der Knopf gehalten wird.
 +</WRAP>
 +
 +
 +<Code c linenums:1 | 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;
 +
 } }
 </Code> </Code>
  
 === Erklärungen zum Quellcode === === Erklärungen zum Quellcode ===
- +  * **Liest den Tasterwert aus** (''analogRead(PIN_BUTTON)''
 +  * Falls der Wert **unter dem Schwellenwert** liegt (Knopf gedrückt): 
 +    * Prüft, ob der Knopf zuvor nicht gedrückt war (''!buttonPressed''
 +    * **Setzt ''buttonPressed = true'' und gibt einmal ''true'' zurück** 
 +  * Falls der Knopf **losgelassen** wird (''value >= threshold''), wird ''buttonPressed = false''  
 +  * <color #ff7f27>Achtung</color> es wird eine statische Variable ''buttonPressed'' verwendet! 
 + 
 +<WRAP center round important 96%> 
 +**Vorteile** 
 + 
 +  * ✅ **Verhindert mehrfaches Hochzählen** bei langem Tastendruck 
 +  * ✅ **Sorgt für saubere Zustandserkennung**   
 +  * ✅ **Erlaubt erst neuen Tastendruck**, wenn der Knopf losgelassen wurde
  
 +</WRAP>
hello_mbot_button.1738582935.txt.gz · Zuletzt geändert: 2025/02/03 11:42 von torsten.roehl