Arduino - Projekte der 3AHET
Würden Sie gerne auf diese Nachricht reagieren? Erstellen Sie einen Account in wenigen Klicks oder loggen Sie sich ein, um fortzufahren.

Ringnetzwerk

Nach unten

Ringnetzwerk Empty Ringnetzwerk

Beitrag von Valentin Killer So Jun 05, 2016 3:43 pm

Aufgabenstellung:

Es soll ein Ringnetzwerk mit vier Arduinos erstellt werden.
Drei der Arduinos werden mit je einem Sensor bestückt, messen und senden Messwerte weiter bis sie beim vierten Arduino ankommen, der diese dann am Serial Monitor ausgibt.
Um die Messung zu starten wird ein Knopf, der mit dem Ausgabearduino verbunden ist, gedrückt.

Aufbau / Verdrahtung

Alle Massen werden miteinander verbunden.
An den ersten Arduino wird ein einfacher Pushbutton gehängt um den Messablauf zu starten.
Da über die Pins TX und RX die Kommunikation mit dem Rechner stattfindet, werden für die Verbindungen zwischen den Arduinos die TX1 und RX1 Pins verwendet.
Es wird immer der TX1 eines Arduinos auf den RX1 des nächsten verdrahtet.

Ringnetzwerk Fi_rin10

Funktion:

Beim Knopfdruck sendet der erste Arduino die Zahl 0. Der nächste Arduino sendet so lange alle empfangegen Signale weiter bis er eine 0 empfängt, diese wird zurückgehalten und der Messvorgang gestartet. Nachdem die Messung beendet ist wird die Kennzeichnung, der Messwert und die Einheit gesendet.
Um die Messwerte am Serial Monitor geordnet anzuzeigen, wird nach jeder Messung die Zahl 10 (=neue Zeile) gesendet.
Schlussendlich wird ein 0er gesendet, damit der nächste Arduino weiß wann er seine Messung durchführen muss.

Jedes Signal das der Ausgabearduino empfängt wird auf den Seriellen Monitor geschrieben.

Code für Senderarduino:

Code:
int val;
int measure;
int sens = A0;                        // Pin für Sensor

void setup() {
  Serial1.begin(9600);                // startet die Serielle Kommunikation
}

void loop() {
  if (Serial1.available() != 0) {       // wenn Daten auf dem seriellen Port 1 ankommen, werden diese gespeichert
  val = Serial1.read();
    if (val == 0) {                     // wenn ein 0er empfangen wird, wird der Messwert ermittelt, eine 10 (neue Zeile),
      measure = Measure();              // die Kennzeichnung, der Messwert, die Einheit und am Ende ein 0er gesendet
      Serial1.write(10);
      Serial1.print("Kennzeichnung: ");
      Serial1.print(measure);
      Serial1.print(" Einheit");
      Serial1.write(0);
    }
    else {
      Serial1.write(val);               // jeder andere Wert als 0 wird sofort weiter übertragen
    }
  }
}

int Measure() {                         // Messwertermittlung
 int Temp = analogRead(sens);
 measure = xxxxxxxxxxxxxxxx;            
 return measure;
}


Code für Start-/Ausgabearduino:

Code:
int bt = 2;
int bt_state;
int val;
int ct = 0;

void setup() {
  pinMode(bt, INPUT_PULLUP);
  Serial.begin(9600);
  Serial1.begin(9600);
  //Serial.println();
}

void loop() {
  
  bt_state = digitalRead(bt);
  
  if ((bt_state == 0) && (ct < 1)) {
    ct = ct + 1;
    Serial1.write(0);
  }
  
  if (Serial1.available() != 0) {
 val = Serial1.read();
    Serial.write(val);
    if (val == 0) {
      ct = 0;
    }
  }
}

Valentin Killer
Admin

Anzahl der Beiträge : 2
Anmeldedatum : 23.02.16
Ort : 3AHET

Nach oben Nach unten

Nach oben


 
Befugnisse in diesem Forum
Sie können in diesem Forum nicht antworten