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: von torsten.roehl
