Benutzer-Werkzeuge

Webseiten-Werkzeuge


hello_mbot_programmorganisation

Dies ist eine alte Version des Dokuments!


Hello mBot Programmorganisation

Eine professionelle Programmstruktur für den Arduino (mBot) sollte modular, erweiterbar und gut wartbar sein. Ich verwende hier eine Finite-State-Machine (FSM), um verschiedene Abläufe sauber steuern zu können. 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.

Finite State Machine (FSM) ist ein Modell mit einer endlichen Anzahl von Zuständen, das durch Eingaben zwischen diesen wechselt. Sie besteht aus Zuständen, Übergängen und einem Startzustand. FSMs werden in der Informatik und Automatisierung zur Steuerung von Abläufen genutzt.

Vorteile einer geordneten Programmstruktur:

  • Modularität: Jeder Modus ist in einer eigenen Funktion gekapselt.
  • Erweiterbarkeit: Neue Modi oder Befehle können problemlos hinzugefügt werden.
  • Wartbarkeit: Durch die klare Zustandsaufteilung ist der Code auch bei Änderungen leicht nachvollziehbar.
  • Flexibilität: Unterschiedliche Abläufe (wie Kalibrierung, Labyrinth oder Stopp) können unabhängig voneinander optimiert und getestet werden.

Grundstrukur

enum State { 
  STATE_A,
  STATE_B,
  STATE_C
};
State state = STATE_A;

void setup() {
  // Initialisierung 
}

void loop() {
  // step: command
  byte cmd = read(); // Funktion, die IR-Befehle einliest

  // step: state - Befehlsverarbeitungund ggf. Zustand wechseln
  state  = decode(cmd);
 
  // step: action 
  switch (state) {   
    case STATE_A:
         actionA();
         break;
    case STATE_B:
         actionB();
         break;
    case STATE_C:
         actionC();
         break;
  }
}
// ...Implementierung der einzelnen Routinen

Die FSM wird hier an mehreren Punkten deutlich:

  • Feste Zustände
    • Die Enumeration definiert eine endliche Menge von Zuständen.
  • Zustandsübergänge
    • Die Funktion decode(cmd) verarbeitet die eingehenden Befehle und ändert den aktuellen Zustand.
  • Zustandsbasierte Aktionen
    • Der switch-Block im loop() entscheidet, welche Aktion ausgeführt wird, basierend auf dem aktuellen Zustand.

Beispiel

FIXME DIESER ABSCHNITT ENTSTEHT GERADE 8-)

Arduino Code

Erklärungen zum Quellcode

Bedienung des Programms

hello_mbot_programmorganisation.1739647781.txt.gz · Zuletzt geändert: 2025/02/15 19:29 von torsten.roehl