Benutzer-Werkzeuge

Webseiten-Werkzeuge


hello_mbot_programmorganisation

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_programmorganisation [2025/02/17 12:49] torsten.roehlhello_mbot_programmorganisation [2025/02/27 14:51] (aktuell) torsten.roehl
Zeile 5: Zeile 5:
 Die Steuerung erfolgt hier mit Hilfe der Infrarot-Fernbedienung.  Die Steuerung erfolgt hier mit Hilfe der Infrarot-Fernbedienung. 
  
-Alternativ kann man natürlich auch Bluetooth verwenden. Dies würde auch komplexere Abläufe ermöglichen, da man beispielsweise einen Rechner mit einem Python-Programm als Steuerung verwenden könnte.//+Alternativ kann man natürlich auch Bluetooth verwenden. Dies würde auch komplexere Abläufe ermöglichen, da man beispielsweise einen Rechner mit einem Python-Programm als Steuerung verwenden könnte. 
 + 
 +Zusätzlich (siehe Beispiel) kann der eingebaute Taster genutzt werden, um einfache Befehle direkt am mBot auszuführen. 
 +//
  
  
Zeile 40: Zeile 43:
 void loop() { void loop() {
   // step: command   // step: command
-  byte cmd = read(); // Funktion, die IR-Befehle einliest+  byte cmd = read(); // Funktion, die Steuer-Befehle einliest
  
   // step: state - Befehlsverarbeitungund ggf. Zustand wechseln   // step: state - Befehlsverarbeitungund ggf. Zustand wechseln
Zeile 75: Zeile 78:
  
 ===== Beispiel ===== ===== Beispiel =====
-FIXME  DIESER ABSCHNITT ENTSTEHT GERADE 8-+<WRAP center round tip 90%> 
-==== Arduino Code ====+Der **mBot** soll in diesem Beispiel die Zustände der LEDs über einen Taster ändern. Bei jedem Tastendruck wechselt die LED zyklisch zwischen drei Zuständen: **aus**, <color #ed1c24>**rot**</color> und <color #22b14c>**grün**</color>. Die Steuerung erfolgt über eine einfache Zustandsmaschine (FSM), die den Tastereingang auswertet und entsprechend die LED-Farbe setzt. 
 + 
 +  * **STATE_OFF** → LED **aus** 
 +  * **STATE_RED** → <color #ed1c24>LED **rot**</color> 
 +  * **STATE_GREEN** → <color #22b14c>LED **grün**</color> 
 +</WRAP> 
 + 
 + 
 + 
 +==== Quellcode (engl. Sourcecode) ==== 
 + 
 +<Code c linenums:1 | Listing 1:MinimalesProgramm.ino> 
 +#include <MeMCore.h> 
 + 
 +MeRGBLed led(0, 2);   // must be fixed! 
 +int PIN_BUTTON 7;   // must be fixed! 
 +int threshold  500; // Analoger Schwellenwert! 
 +int buttonCount; 
 + 
 + 
 +enum State { 
 +  STATE_OFF, 
 +  STATE_RED, 
 +  STATE_GREEN 
 + 
 +}; 
 +State state STATE_OFF; 
 + 
 +void setup() { 
 +  led.setpin(13); 
 +  pinMode(PIN_BUTTON, INPUT); 
 +  buttonCount 0; 
 +
 + 
 +void loop() { 
 +  // step: command 
 +  int cmd = read(); 
 + 
 +  // step: state  
 +  state  = decode(cmd); 
 + 
 +  // step: action 
 +  switch (state) { 
 +    case STATE_RED: 
 +      actionRed(); 
 +      break; 
 +    case STATE_GREEN: 
 +      actionGreen(); 
 +      break; 
 +    case STATE_OFF: 
 +      actionOff(); 
 +      break; 
 +  } 
 +
 + 
 + 
 +/* 
 +   Funktionen 
 + */ 
 + 
 + 
 +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; 
 + 
 +
 + 
 +int read() { 
 +  if ( isButtonPressed() ) 
 +    buttonCount += 1; 
 + 
 +  if (buttonCount > 2) 
 +    buttonCount = 0; 
 + 
 +  return buttonCount; 
 +
 + 
 + 
 +State decode(int cmd) { 
 +  switch (cmd) { 
 +    case 1: return STATE_RED; 
 +    case 2: return STATE_GREEN; 
 +  } 
 +  return STATE_OFF; 
 +
 + 
 +void actionRed() { 
 +  led.setColorAt(1, 255, 0, 0); 
 +  led.setColorAt(0, 255, 0, 0); 
 +  led.show(); 
 +
 + 
 +void actionGreen() { 
 +  led.setColorAt(1, 0, 255, 0); 
 +  led.setColorAt(0, 0, 255, 0); 
 +  led.show(); 
 +
 + 
 +void actionOff() { 
 +  led.setColorAt(1, 0, 0, 0); 
 +  led.setColorAt(0, 0, 0, 0); 
 +  led.show(); 
 +
 + 
 +</Code>
  
 === Erklärungen zum Quellcode === === Erklärungen zum Quellcode ===
  
-==== Bedienung des Programms====+ 
 +  - Der Taster wird über ''analogRead(PIN_BUTTON)'' ausgelesen. 
 +  - Die Funktion'' isButtonPressed()'' erkennt den Tastendruck und verhindert mehrfaches Zählen (Entprellung). 
 +  - Die Funktion ''read()'' zählt die Tasterbetätigungen und wechselt durch die Zustände: 
 +          -  **OFF → RED → GREEN → OFF**. 
 +  - Die Funktion ''decode(cmd)'' wandelt den Zählerwert in einen **State** um. 
 +  - Die entsprechenden **LED-Funktionen** setzen die LED-Farbe je nach Zustand. 
 + 
 + 
 +Das Programm ermöglicht eine einfache Steuerung einer LED über einen Taster mit einer **Zustandsmaschine**. 
  
  
hello_mbot_programmorganisation.1739796551.txt.gz · Zuletzt geändert: 2025/02/17 12:49 von torsten.roehl