2 Arduinos miteinander Verbinden

Veröffentlicht von

Hier mal ein Beispiel, wie man 2 Arduinos verbinden und Daten senden kann.

Der Aufbau besteht aus:

  • der erste Arduino ist der Sender, an dem sind 2 Buttons angeschlossen
  • der zweite Arduino ist der Empfänger, an dem sind 2 LEDs angeschlossen
  • Die 2 Arduinos sind mit 3 Kabeln verbunden, GND -> GND, TX -> RX, RX -> TX
  • wenn der Empfänger kein Signal bekommt, dann sind die LEDs an
  • wenn der Empfänger ein Signal bekommt, dann gehen die LEDs für eine Sekunde aus

Sender

// Pins
int ch01 = 2; // roter Button
int ch02 = 3; // grüner Button

int pause = 500;

void setup() {

  pinMode(ch01, INPUT);
  pinMode(ch02, INPUT);

  Serial.begin(9600);
  Serial.println("warte auf Eingabe...");

}

void loop() {
  delay(20);
  Serial.flush();
  
  int button_1 = digitalRead(ch01);
  int button_2 = digitalRead(ch02);

  Serial.flush();

  if (button_1 == HIGH) {
    char zeichenkette[] = "RED";
    sendZeichen(zeichenkette);
  } else if (button_2 == HIGH) {
    char zeichenkette[] = "GREEN";
    sendZeichen(zeichenkette);
  }
}

void sendZeichen(char zeichenkette[]) {

  // setze ein Zeilenumbruch ans Ende der Zeichenkette
  char zeilenumbruch[] = "\n";
  strcat( zeichenkette, zeilenumbruch ); 

  // Sende Zeichenkette mit Zeilenumbruch
  Serial.write(zeichenkette); 
  delay(pause);
}Code-Sprache: JavaScript (javascript)

Empfänger

// Quelle
// https://gist.github.com/ladislas/5759763

String inData;
int pause = 1000;

int ch01 = 2; // rote LED
int ch02 = 3; // grüne LED

void setup() {

  pinMode(ch01, OUTPUT);
  pinMode(ch02, OUTPUT);

  // LEDs an
  digitalWrite(ch01, HIGH);
  digitalWrite(ch02, HIGH);

  Serial.begin(9600);
  Serial.println("warte auf Signal...");
}

void loop() {
  // Der Empfänger liest jedes Zeichen, der Zeichenkette einzeln aus,
  // hier werden die einzelnen Zeichen wieder zu einer Zeichenkette zusammen gebaut,
  // ein Zeilenumbruch ist das Ende der Zeichenkette und danach
  // wird auf die nächste Zeichenkette gewartet
  
  while (Serial.available() > 0)
    {
        // ein Zeilenumbruch macht man mit dem Befehl "\n" 
        char recieved = Serial.read(); // Empfangen   
        
        // das "\n" wird nicht mit in die Zeichenkette eingefügt
        if (recieved != '\n'){ 
          
          // Einzelne Zeichen zu einer Zeichenkette zusammenbauen   
          inData += recieved; 
        }
        
        // Wenn ein Zeilenumbruch kommt, dann die Zeichenkette ausgeben.
        if (recieved == '\n')
        {
            Serial.print("Arduino Received: ");
            Serial.println(inData);
            
            startAction(inData);
            inData = ""; // Lösche die gespeicherte Zeichenkette
        }
    }
}

void startAction(String inData){    
    if (inData == "RED") {
      Serial.println("LED: RED");                
      digitalWrite(ch01, LOW);    // LED aus
      delay(pause);               // Pause
      digitalWrite(ch01, HIGH);   // LED an
    } else if (inData == "GREEN") {
      Serial.println("LED: GREEN");                
      digitalWrite(ch02, LOW);    // LED aus
      delay(pause);               // Pause
      digitalWrite(ch02, HIGH);   // LED an
    } 
}Code-Sprache: JavaScript (javascript)