Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Sie befinden sich in: Unterrichtsangebote Fächer Fachbereich III Informatik Arduino Sonstiges Kommunikation zwischen zwei Arduinos

Kommunikation zwischen zwei Arduinos

Ziel: LEDs auszulösen, indem von dem Arduino Mega Signale in Bytes gesendet werden.

Material:

- Arduino Mega2560

- Arduino Uno

- 2 LEDs

- mehrere Steckverbinder

Aufbau:

Mega_Uno_SimpleCommunication_Draft

Code (mit Erläuterungen):

Arduino Mega2560 (welcher der Master ist, sprich der die Signale weitergibt und auch an dem PC angeschlossen ist)

int ledPin = 13;
int board; // 1 = Uno. 2 = Mega.
int on_off; // 1 = An. 0 = Aus.
int rec;
 
void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
 
  pinMode(ledPin, OUTPUT);
 
  Serial.flush();
  Serial1.flush();
}
 
void loop() {
 
  //Benutzereingabe
  Serial.println("Uno = 1 / Mega = 0: "); //Das Board auswählen
 
  while(Serial.available() == 0)
  {
    
  }
  board = Serial.parseInt(); //Liest Benutzereingabe
 
  Serial.println("LED An = 1 / Aus = 0: ");
  while(Serial.available() == 0)
  {
    
  }
  on_off = Serial.parseInt();
 
 
  switch(board)
  {
  
  //Wenn Mega Board ...
  case 0:
    if(on_off == 1) digitalWrite(ledPin, HIGH); //Uno LED An
    else digitalWrite(ledPin, LOW);             //Uno LED Aus
    break;  //Case beenden
 
  //Wenn Uno Board ...
  case 1:
    Serial1.write(on_off/256); //Sende den Quotient oder "Wie oft" Wert.
    Serial1.write(on_off%256); //Sende den Modulo oder Rest.
    delay(50);  //Warte auf Seriellen Port
 
    while(Serial1.available()<2) //Warte auf 2 bytes
    {
      //Mach nichts
    }
    byte b1 = Serial1.read();
    byte b2 = Serial1.read();
    rec = (b1*256)+b2;        //Byte Rechnung
 
    if (rec == 2)
    {
      Serial.println("Vorgang abgeschlossen -> LED leuchtet!");
    }
    break;  //Case beenden
  }
}

 

Für den Arduino Uno (welcher der Client ist, sprich die Befehle vom Mega ausführt oder Bytes and diesen gibt)

int ledPin = 13;
int rec;
int Ack_tx = 2; //Bytes
 
 
void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}
 
void loop() {
  while(Serial.available()<2) //Warte auf 2 Bytes
  {
    //Mach nichts
  }
 
  byte b1 = Serial.read();  //Lies oberen Byte
  byte b2 = Serial.read();  //Lies unteren Byte
  rec = (b1*256)+b2;  //Kombiniere beide Bytes
 
  if(rec == 1) digitalWrite(ledPin, HIGH);  //Uno LED An
  else digitalWrite(ledPin, LOW);           //Uno LED Aus
 
  Serial.write(Ack_tx/256); //Sende den Quotient oder "Wie oft" Wert.
  Serial.write(Ack_tx%256); //Sende den Modulo oder Rest.
  delay(50);  //Warte auf Seriellen Port
}

 

 

 

 

 

Erstellt: Onur Iren (08.11.2016) Letzte Änderung: Jacob Busshart (28.06.2017)