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 09:13] – [Erklärungen zum Quellcode] torsten.roehl | hello_mbot_senden_empfangen [2025/02/17 12:48] (aktuell) – [Hello mBot Senden/Empfangen] torsten.roehl | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
// | // | ||
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**, z. B. für **Spiele, Schwarmverhalten oder gruppengesteuertes Verhalten** | * Steuerung von Aktionen basierend auf **drahtlosen Signalen**, z. B. für **Spiele, Schwarmverhalten oder gruppengesteuertes Verhalten** | ||
+ | |||
+ | |||
+ | |||
<WRAP center round tip 85%> | <WRAP center round tip 85%> | ||
Zeile 18: | Zeile 23: | ||
MeIR irSender; | MeIR irSender; | ||
MeRGBLed led(0, 2); | MeRGBLed led(0, 2); | ||
- | String PROTOCOL_01=" | + | String PROTOCOL_01=" |
void setup() { | void setup() { | ||
irSender.begin(); | irSender.begin(); | ||
+ | led.setpin(13); | ||
led.setColor(0, | led.setColor(0, | ||
led.show(); | led.show(); | ||
} | } | ||
+ | |||
void loop() { | void loop() { | ||
// Rote LED an, wenn gesendet wird | // Rote LED an, wenn gesendet wird | ||
Zeile 31: | Zeile 38: | ||
// String über IR senden | // String über IR senden | ||
irSender.sendString(PROTOCOL_01); | irSender.sendString(PROTOCOL_01); | ||
- | delay(200); | + | delay(200); |
// LED wieder ausschalten | // LED wieder ausschalten | ||
led.setColor(0, | led.setColor(0, | ||
led.show(); | led.show(); | ||
- | delay(2000); | + | delay(3000); |
} | } | ||
</ | </ | ||
Zeile 42: | Zeile 48: | ||
<Code c linenums:1 | Listing 1: | <Code c linenums:1 | Listing 1: | ||
#include < | #include < | ||
+ | |||
MeIR irReceiver; | MeIR irReceiver; | ||
- | MeRGBLed led(0, 2); // LED-Modul am Port 0 mit 2 LEDs | + | MeRGBLed led(0, 2); |
- | String PROTOCOL_01=" | + | |
void setup() { | void setup() { | ||
- | | + | Serial.begin(9600); |
- | | + | |
- | | + | |
+ | | ||
+ | led.show(); | ||
} | } | ||
void loop() { | void loop() { | ||
- | if (irReceiver.decodeString()) { // empfangen ? | + | |
- | String receivedMessage | + | |
- | if (receivedMessage == PROTOCOL_01) { | + | uint32_t receivedValue |
- | | + | |
- | led.show(); | + | |
- | delay(300); | + | case 97: onAction_97(); |
- | // LED wieder ausschalten | + | } |
- | led.setColor(0, 0, 0, 0); | + | } |
- | led.show(); | + | |
- | } | + | |
- | } | + | |
} | } | ||
- | </ | ||
- | ==== Erklärungen zum Quellcode ==== | ||
+ | /* | ||
+ | * 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); | ||
+ | } | ||
- | ==== 1. Programme hochladen | + | |
+ | |||
+ | </ | ||
+ | ==== 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 und Verbesserungen zu implementieren. Informieren Sie sich im Internet auch über das ASCII-Format. | ||
+ | // | ||
+ | == 1. Programme hochladen | ||
* Sender-Programm auf **mBot 1** laden | * Sender-Programm auf **mBot 1** laden | ||
* Empfänger-Programm auf **mBot 2** laden | * Empfänger-Programm auf **mBot 2** laden | ||
* **USB-Kabel trennen**, beide mBots einschalten | * **USB-Kabel trennen**, beide mBots einschalten | ||
- | ==== 2. Testablauf | + | == 2. Testablauf == |
- | * **mBot 1 (Sender):** LED **blinkt kurz rot**, wenn er `"HELLO"` sendet. | + | * **Sender (mBot 1):** LED **<color #ed1c24>blinkt kurz rot</ |
- | * **mBot 2 (Empfänger):** LED **blinkt kurz grün**, wenn `"HELLO"` empfangen wurde. | + | * **Empfänger (Bot 2):** LED **<color #22b14c>blinkt kurz grün</ |
+ | |||
+ | <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 '' | ||
+ | </ | ||
- | Es ist **egal, welcher mBot zuerst eingeschaltet wird**. | + | ++++ |
hello_mbot_senden_empfangen.1738660384.txt.gz · Zuletzt geändert: 2025/02/04 09:13 von torsten.roehl