hello_mbot_senden_empfangen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
hello_mbot_senden_empfangen [2025/02/04 08:34] – torsten.roehl | hello_mbot_senden_empfangen [2025/02/17 12:48] (aktuell) – [Hello mBot Senden/Empfangen] torsten.roehl | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Hello mBot Senden/ | ====== Hello mBot Senden/ | ||
+ | // | ||
Dieses Beispiel zeigt, wie ein mBot per **Infrarotsignal (IR)** eine LED auf einem zweiten mBot steuern kann. | Dieses Beispiel zeigt, wie ein mBot per **Infrarotsignal (IR)** eine LED auf einem zweiten mBot steuern kann. | ||
- | Der **Sender** sendet alle **2 Sekunden** das Signal **" | + | Der **Sender** sendet alle **3 Sekunden** das Signal **" |
+ | |||
+ | {{ : | ||
**Einsatzmöglichkeiten: | **Einsatzmöglichkeiten: | ||
* Grundlagen der **IR-Kommunikation** zwischen Robotern | * Grundlagen der **IR-Kommunikation** zwischen Robotern | ||
- | * Steuerung von Aktionen basierend auf **drahtlosen Signalen** | + | * Steuerung von Aktionen basierend auf **drahtlosen Signalen**, z. B. für **Spiele, Schwarmverhalten oder gruppengesteuertes Verhalten** |
- | * Erweiterbar um verschiedene | + | |
+ | |||
+ | |||
+ | <WRAP center round tip 85%> | ||
+ | |||
+ | Dieses Beispiel stellt nur die **grundlegende Struktur** zur Verfügung. Es ist noch keine **wirkliche Kommunikation**, | ||
+ | </ | ||
+ | |||
+ | ===== Quellcode (engl. Sourcecode) ===== | ||
+ | ==== Quellcode mBot-Sender ==== | ||
+ | <Code c linenums:1 | Listing 1: | ||
+ | #include < | ||
+ | MeIR irSender; | ||
+ | MeRGBLed led(0, 2); | ||
+ | String PROTOCOL_01=" | ||
+ | |||
+ | void setup() { | ||
+ | irSender.begin(); | ||
+ | led.setpin(13); | ||
+ | led.setColor(0, | ||
+ | led.show(); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | // Rote LED an, wenn gesendet wird | ||
+ | led.setColor(0, | ||
+ | led.show(); | ||
+ | // String über IR senden | ||
+ | irSender.sendString(PROTOCOL_01); | ||
+ | delay(200); | ||
+ | // LED wieder ausschalten | ||
+ | led.setColor(0, | ||
+ | led.show(); | ||
+ | delay(3000); | ||
+ | } | ||
+ | </ | ||
+ | ==== Quellcode mBot-Empfänger ==== | ||
+ | <Code c linenums:1 | Listing 1: | ||
+ | #include < | ||
+ | |||
+ | MeIR irReceiver; | ||
+ | MeRGBLed led(0, 2); | ||
+ | |||
+ | void setup() { | ||
+ | | ||
+ | irReceiver.begin(); | ||
+ | led.setpin(13); | ||
+ | led.setColor(0, | ||
+ | led.show(); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | if (irReceiver.decode()) { // Nachricht empfangen? | ||
+ | |||
+ | uint32_t receivedValue = irReceiver.value; | ||
+ | uint32_t buttonCode = receivedValue >> 16 & 0xff; | ||
+ | switch (buttonCode) { // ASCII als DEC! | ||
+ | case 97: onAction_97(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /* | ||
+ | * Funktionen | ||
+ | */ | ||
+ | void onAction_97() { | ||
+ | // dec 97 ist ascii-code a! | ||
+ | delay(200); | ||
+ | Serial.println(" | ||
+ | led.setColor(0, | ||
+ | led.show(); | ||
+ | delay(300); | ||
+ | // LED wieder ausschalten | ||
+ | led.setColor(0, | ||
+ | led.show(); | ||
+ | delay(200); | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | </ | ||
+ | ==== Erklärungen zum Quellcode ==== | ||
+ | //Dieses Beispiel erfordert, dass die gesendeten Strings eine Länge von 1 haben. Empfangen werden sie, indem das Zeichen als ASCII-Wert interpretiert wird (im Dezimalformat). Damit ist dieses Beispiel bewusst als ein einfaches, exemplarisches Beispiel gedacht. Sie sind herzlich eingeladen, eigene Erweiterungen | ||
+ | // | ||
+ | == 1. Programme hochladen == | ||
+ | | ||
+ | * Empfänger-Programm auf **mBot 2** laden | ||
+ | * **USB-Kabel trennen**, beide mBots einschalten | ||
+ | |||
+ | == 2. Testablauf == | ||
+ | * **Sender (mBot 1):** LED **<color # | ||
+ | * **Empfänger (Bot 2):** LED **<color # | ||
+ | |||
+ | <WRAP center round tip 85%> | ||
+ | Übrigens, warum ist es egal, welcher mBot zuerst eingeschaltet wird? | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ====== Alternative Lösung zum Empfang ====== | ||
+ | ++++ Eine Alternative zum Empfang von Strings über Infrarot ist im folgenden Codeabschnitt dargestellt. | | ||
+ | |||
+ | <Code c linenums:1 | Listing 1: | ||
+ | #include < | ||
+ | |||
+ | MeIR irReceiver; | ||
+ | |||
+ | String msg = ""; | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(9600); | ||
+ | irReceiver.begin(); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | |||
+ | if ( isMessage() ) { | ||
+ | String s = getMessage(); | ||
+ | Serial.print(" | ||
+ | Serial.println(s); | ||
+ | } | ||
+ | // Weiterer Code (action...) | ||
+ | Serial.println(" | ||
+ | |||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Funktionen | ||
+ | */ | ||
+ | bool isMessage() { | ||
+ | msg = irReceiver.getString(); | ||
+ | return ( msg.length() > 0 ) ? true: false; | ||
+ | } | ||
+ | |||
+ | String getMessage() { | ||
+ | return msg; | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | == Erklärung zum Quellcode == | ||
+ | |||
+ | Der Code prüft in der loop()-Funktion kontinuierlich, | ||
+ | |||
+ | <WRAP center round info 95%> | ||
+ | Eine Kommunikation mit Strings ist für ein Protokoll nicht unbedingt die eleganteste Methode, da keine '' | ||
+ | </ | ||
- | Das Beispiel eignet sich für **Einsteiger** und kann für komplexere Steuerungsszenarien angepasst werden. 🚀 | + | ++++ |
hello_mbot_senden_empfangen.1738658044.txt.gz · Zuletzt geändert: 2025/02/04 08:34 von torsten.roehl