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.

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.

FIXME ABSCHNITT SCHREIBEN 8-)

Grundstrukur

enum State { 
  STATE_CALIBRATION,
  STATE_LABYRINTH,
  STATE_STOP
};
State state = STATE_CALIBRATION;

void setup() {
  // Initialisierung 
}

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

  // step: state - Befehlsverarbeitungund ggf. Zustand wechseln
  currentState  = decode(cmd);
 
  // step: action 
  switch (state) {   
    case STATE_CALIBRATION:
         actionCalibration();
         break;
    case STATE_LABYRINTH:
         actionLabyrinth();
         break;
    case STATE_STOP:
         actionStop();
         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.
hello_mbot_programmorganisation.1739645807.txt.gz · Zuletzt geändert: 2025/02/15 18:56 von torsten.roehl