Um zwischen zwei Arduinos Daten zu übertragen kann man die serielle Schnittstelle verwenden. Mit zwei Arduino MEGA ist dies recht einfach möglich. Da reichen zwei (drei) Drähte die jeweils eine der seriellen Schnittstelle über Kreuz miteinander verbindet: Bei Bedarf muss noch zwischen den zwei Arduinos eine Masseverbindung hergestellt werden. Hier kann das entfallen da beide Arduinos von der selben Spannungsquelle versorgt werden. Für die Übertragung habe ich JSON als Datenformat gewählt. Die Daten werden in einen JSON-String gepackt und dann serielle übertragen. Um die Daten vor der Übertragung in das JSON-Format zu wandeln und beim Empfänger wieder zurückzuwandeln wird die ArduinoJson-Library verwendet. Das folgende Beispiel zeigt eine unidirektionale Übertragung von vier Bits vom unteren Arduino MEGA zum oberen MEGA. Hier wird binär 0101 übertragen. Serielle Datenübertragung mit JSON. Auf dem unteren MEGA sind D8 - D11 als Eingang mit aktivierten PullUp-Widerständen konfiguriert. Die vier Bit werden dort über die Drahtbrücken gesetzt.
Ein Protokoll oder Steckerbelegung wird nicht festgelegt. Dies hat natürlich den Vorteil, dass man den RS485 für seine eigenen Anwendungen komfortabel nutzen kann, das Protokoll kann "frei" gewählt werden, die Art der Teilnehmer kann stark heterogen sein, o. ä. Der RS485 Bus kann Vollduplex (zeitgleich Senden und Empfangen) oder Halbduplex (Senden und Empfangen, aber nicht zeitgleich) betrieben werden. Die gängigste Methode ist der Betrieb im Halbduplex, dazu benötigt man 2 Kabel. Für den Vollduplexbetrieb werden 4-Kabel benötigt. RS-485 Bus, 2 Kabel, Halbduplex Im Halbduplexbetrieb findet das Senden und Empfangen über die gleiche Leitung statt. Alle Teilnehmer können miteinander kommunizieren. Bei besonders langen Kabeln, muss am Anfang und am Ende ein Widerstand von ca. Datenaustausch zwischen zwei arduino uno. 120 Ω (R1 und R2) angebracht werden. Bei kurzen Kabellängen, kann darauf verzichtet werden. RS-485, 4 Kabel, Vollduplex Im Vollduplexbetrieb findet das Senden und Empfangen über zwei unterschiedliche Kanäle statt. Problematisch ist hier jedoch, dass Bus-Master und Bus-Slave von vornherein festgelegt sind.
// String portName = "COM1"; // alternativ: verwende stattdessen einen bekannten Portnamen myPort = new Serial ( this, portName, baudrate); // Erzeuge ein Serial Objekt und stelle eine Verbindung her size ( 300, 300); // mache das Fenster etwas größer} void draw () { int forwardSpeed = ( int) map ( mouseY, height, 0, - 127, 127); //rechne die y-Position des Mauszeigers in einen Schubwert zwischen -127 und 127 um. // das (int) sorgt für die Umwandlung der Kommazahl in einen Ganzzahligen (integer) Wert. int turnSpeed = ( int) map ( mouseX, 0, height, - 127, 127); //rechne die x-Position des Mauszeigers in ein Drehgeschwindigkeit zwischen -127 und 127 um. Datenaustausch zwischen zwei arduino tutorial. int leftSpeed = forwardSpeed + turnSpeed; //Zum Vorwärtsfahren drehen sich beide Motoren in die gleiche Richung, zum Drehen in Unterschiedliche int rightSpeed = forwardSpeed - turnSpeed; myPort. write ( 'l' + str ( leftSpeed) + " \n "); //Sende erst 'l', dann die mit str() in eine Zeichenkette umgewandelte Zahl, dann einen Zeilenabschluss ("\n") myPort.
Dabei kann z. der Buchstabe f für "fahre los" und der Buchstabe s für "stop" stehen. Das Arduino Programm muss zum Empfang der Befehle nur: Überprüfen, ob neue Daten angekommen sind (mit Serial. available()) Das erste Zeichen aus den angekommenen Daten lesen (mit ()) Das erhaltene Zeichen untersuchen, um zu erkennen, ob es ein bekannter Befehl ist. (im Bedingungsteil (Runde Klammern) von if oder switch case) Eine Funktion aufrufen, die das erledigt, was dem Befehl entspricht (im Befehlsblock (geschweifte Klammern) von if oder switch case) Ein Beispielprogramm mit 2 alternativen Befehlen (LED an/aus) Das Beispiel libraries/Serial/SimpleWrite in Processing enthält sowohl den Processing, als auch den Arduino Code, um mit der Maus eine LED auf dem Arduino ein- und ausschalten zu können. Hier ein kleiner Ausschnitt mit den wichtigsten Teilen auf Arduinoseite:... if ( Serial. available ()) { // Wenn Daten empfangen wurden und zum Lesen bereitstehen int val = Serial. Apfel Z | Datenaustausch zwischen Arduinos mit MIRF. read (); // lese das erste Zeichen in der Warteschlange und speichere es in der Variable 'val' zwischen if ( val == 'H') { // Wenn das Zeichen den Wert 'H' hat... digitalWrite ( ledPin, HIGH); // schalte eine LED an} else { digitalWrite ( ledPin, LOW); // wenn es irgendein anderes Zeichen ist, schalte die LED aus.
**) Pin-Belegung kann im Software-Sketch gendert werden. 8+7 sind der Standard, wenn im Software-Sketch nichts anderes angegeben wird. ***) Wird bei der Mirf-Bibliothek nicht bentigt Die Anschlsse sind leider nicht Breadboard-kompatibel, deshalb musste ich mir ein paar Male to Female Jumper Kabel zulegen. Die Beispiels-Sketche, die mit der Bibliothek mitgeliefert wurden, waren wir anfangs nicht sehr hilfreich, da sie nicht direkt meiner geplanten Verwendung entsprachen. Dadurch, dass nur byte versendet werden knnen und ich es mit der Typen-Konvertierung der Arduino-IDE noch nicht so wirklich drauf habe, war aller Anfang etwas schwer. In meinen Beispielen haben wir zwei Sketches – ein Arduino ist der Sender, der andere Arduino ist der Empfnger – und es werden (in diesem Fall maximal) 15 alphanumerische Zeichen bertragen. Das absolute Maximum an Zeichen, die bei einer bertragung bertragen werden knnen, lautet brigens: 32 Zeichen. 2 oder Mehrere Arduinos per Netzwerk miteinander über Ethernet verbinden? (Computer, Technik, Technologie). Sender #include#include In diesem Artikel ist beschrieben, wie ihr Arduino-Programme mittels einfacher Kommandos vom PC aus 'fernsteuern' könnt. Zahlen vom PC an den Arduino übermitteln könnt. Beide Mögglichkeiten können problemlos mit dem Senden von Daten vom Arduino zum PC kombiniert werden. Dazu verwenden wir die Serielle Schnittstelle des Arduinos, die ihr bereits aus dem 'Serial Monitor' kennt. Ihr könnt also einfach den Serial-Monitor nutzen, um manuell Daten an den Arduino zu schicken - z. Datenaustausch zwischen zwei arduino.cc. B. um zu testen, ob er auf Kommandos so reagiert wie ihr es erwartet. Wirklich spannend wird es aber, wenn ihr ein eigenes Programm (z. ein Processing-Sketch) schreibt, welches die Serielle Schnittstelle verwendet, um dem Arduino vollautomatisch Befehle zu übermitteln. In allen Fällen muss der Arduino mit einem Kabel mit dem PC verbunden sein - denn über dieses Kabel werden die Daten in Form von Elektrischen Impulsen übertragen… Kommandos in Form von einzelnen Zeichen an den Arduino senden Die einfachste Art und Weise, einen Befehl vom PC an den Arduino zu übermitteln, ist, ihm einzelne Zeichen über die Serielle Schnittstelle zu schicken, die ein Programm auf dem Arduino auswertet.