hello_mbot_programmorganisation
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| hello_mbot_programmorganisation [2025/02/17 12:49] – torsten.roehl | hello_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, | + | Alternativ kann man natürlich auch Bluetooth verwenden. Dies würde auch komplexere Abläufe ermöglichen, |
| + | |||
| + | 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 | + | 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 # |
| + | |||
| + | * **STATE_OFF** → LED **aus** | ||
| + | * **STATE_RED** → <color # | ||
| + | * **STATE_GREEN** → <color # | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ==== Quellcode (engl. Sourcecode) ==== | ||
| + | |||
| + | <Code c linenums:1 | Listing 1: | ||
| + | #include < | ||
| + | |||
| + | MeRGBLed led(0, 2); // must be fixed! | ||
| + | int PIN_BUTTON | ||
| + | int threshold | ||
| + | int buttonCount; | ||
| + | |||
| + | |||
| + | enum State { | ||
| + | STATE_OFF, | ||
| + | STATE_RED, | ||
| + | STATE_GREEN | ||
| + | |||
| + | }; | ||
| + | State state = STATE_OFF; | ||
| + | |||
| + | void setup() { | ||
| + | led.setpin(13); | ||
| + | pinMode(PIN_BUTTON, | ||
| + | buttonCount | ||
| + | } | ||
| + | |||
| + | 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; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | | ||
| + | */ | ||
| + | |||
| + | |||
| + | 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, | ||
| + | led.setColorAt(0, | ||
| + | led.show(); | ||
| + | } | ||
| + | |||
| + | void actionGreen() { | ||
| + | led.setColorAt(1, | ||
| + | led.setColorAt(0, | ||
| + | led.show(); | ||
| + | } | ||
| + | |||
| + | void actionOff() { | ||
| + | led.setColorAt(1, | ||
| + | led.setColorAt(0, | ||
| + | led.show(); | ||
| + | } | ||
| + | |||
| + | </ | ||
| === Erklärungen zum Quellcode === | === Erklärungen zum Quellcode === | ||
| - | ==== Bedienung des Programms==== | + | |
| + | - Der Taster wird über '' | ||
| + | - Die Funktion'' | ||
| + | - Die Funktion '' | ||
| + | - **OFF → RED → GREEN → OFF**. | ||
| + | - Die Funktion '' | ||
| + | - 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: von torsten.roehl
