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.
ABSCHNITT SCHREIBEN
enum State { STATE_IDLE, STATE_CALIBRATION, STATE_LABYRINTH, STATE_STOP }; State currentState = STATE_IDLE; void setup() { // Initialisierung z. B. von IR-Empfänger, Serial, etc. } void loop() { byte cmd = readIR(); // Funktion, die IR-Befehle einliest // Befehl verarbeiten und ggf. Zustand wechseln if (cmd != NO_CMD) { processCommand(cmd); } // Je nach aktuellem Zustand die entsprechende Routine ausführen switch (currentState) { case STATE_IDLE: idleRoutine(); break; case STATE_CALIBRATION: calibrationRoutine(); break; case STATE_LABYRINTH: labyrinthRoutine(); break; case STATE_STOP: stopRoutine(); break; } } void processCommand(byte cmd) { // Beispiel: Wenn 'f' (als Byte) empfangen wird, dann Stop-Zustand setzen if (cmd == CMD_STOP) { currentState = STATE_STOP; } // Hier können weitere Befehle verarbeitet werden, // z. B. Übergang in den Kalibrierungs- oder Labyrinthmodus. } // Implementierung der einzelnen Routinen void idleRoutine() { // Standardverhalten im Leerlauf } void calibrationRoutine() { // Abläufe für den Kalibrierungsmodus } void labyrinthRoutine() { // Abläufe für den Labyrinthmodus } void stopRoutine() { // Not-Aus oder Stopp-Verhalten, ggf. Warteschleife }
hello_mbot_programmorganisation.1739645060.txt.gz · Zuletzt geändert: 2025/02/15 18:44 von torsten.roehl