1 |
|
2 | #include <SoftwareSerial.h> //Füge die SoftwareSerial Bibliothek hinzu
|
3 |
|
4 | SoftwareSerial softserial(10,11); //Starte eine Sofware Serielle Schnitstelle mit Tx = 11 und Rx = 10
|
5 |
|
6 | byte addr1 = 'A'; //Adresse Slave 1
|
7 | byte addr2 = 'B'; //Adresse Slave 2
|
8 |
|
9 |
|
10 | byte Messwert1[16]; //Array um die 16-Byte Messwerte von Slave 1 zu speichern
|
11 | byte Messwert2[16]; //Array um die 16-Byte Messwerte von Slave 2 zu speichern
|
12 | int16_t adc1_0, adc1_1, adc1_2, adc1_3; //Variablen um die aufbereiteten Werte von Slave 1 zu speichern
|
13 | int16_t adc1_4, adc1_5, adc1_6, adc1_7; //Variablen um die aufbereiteten Werte von Slave 1 zu speichern
|
14 | int16_t adc2_0, adc2_1, adc2_2, adc2_3; //Variablen um die aufbereiteten Werte von Slave 2 zu speichern
|
15 | int16_t adc2_4, adc2_5, adc2_6, adc2_7; //Variablen um die aufbereiteten Werte von Slave 2 zu speichern
|
16 |
|
17 | int counter = 0; //Zähler initialisieren
|
18 |
|
19 | void setup() {
|
20 | Serial.begin(9600); //Starte die Serielle Kommunikatuion mit einer Baudrate von 9600
|
21 | softserial.begin(9600); //Starte die Software Serielle Kommunikation mit einer Baudrate von 9600
|
22 | delay(1000); //Warte 1 Sekunde
|
23 | }
|
24 |
|
25 | void loop() {
|
26 | counter ++; //Zähler hochzählen
|
27 | Serial.println(counter); //Zählerstand am Seriellen Monitor ausgeben
|
28 | //Slave 1 ansprechen
|
29 | do{
|
30 | softserial.write(addr1); //Adresse an Slave 1 senden
|
31 | } while(softserial.read() != addr1); //solange bis Slave 1 geantwortet hat
|
32 | Serial.println("Slave 1 OK"); //Nach erfolgreichem Kommunikationsaufbau mit Slave 1 kurzer Statusbericht am Seriellen Monitor
|
33 | softserial.begin(9600); //Neustart der Software Seriellen Kommunikation um evtl. vorhandene Datenreste im Seriellen Puffer zu löschen (Theorie)
|
34 | delay(10); //10ms Delay
|
35 |
|
36 | while(softserial.available() < 16){ //Warte Solange bis mindestens 16 Werte im Seriellen Puffer vorhanden sind
|
37 | delay(1); //1ms Delay
|
38 | }
|
39 |
|
40 | //Messwerte von Slave 1 empfangen
|
41 | softserial.readBytes(Messwert1, 16); //16 Werte aus dem Seriellen Puffer in das Array "Messwert1" schreiben
|
42 |
|
43 | //Messwerte von Slave 1 "zusammensetzten"
|
44 | adc1_0 = Messwert1[0] << 8 | Messwert1[1]; //Der Messwert adc1_0 vom ADS1115, A0 am Slave 1 setzt sich aus den ersten beiden Einträgen im Array Messwert1
|
45 | adc1_1 = Messwert1[2] << 8 | Messwert1[3]; //Dazu wird mit Hilfe der Bitmath Operationen der 1. Wert (Messwert1[0]) um 8 Bits nach hinten verschoben
|
46 | adc1_2 = Messwert1[4] << 8 | Messwert1[5]; //Anschließend wird der 2. Wert mit der Bitwise Or funktion hinten angefügt. Es ensteht ein 16-Bit Integer.
|
47 | adc1_3 = Messwert1[6] << 8 | Messwert1[7]; //Die Operation wird für alle Messwerte wiederholt
|
48 | adc1_4 = Messwert1[8] << 8 | Messwert1[9];
|
49 | adc1_5 = Messwert1[10] << 8 | Messwert1[11];
|
50 | adc1_6 = Messwert1[12] << 8 | Messwert1[13];
|
51 | adc1_7 = Messwert1[14] << 8 | Messwert1[15];
|
52 | delay(10);
|
53 |
|
54 |
|
55 | //Slave 2 ansprechen
|
56 | do{
|
57 | softserial.write(addr2); //Adresse an Slave 1 senden
|
58 | } while(softserial.read() != addr2); //solange bis Slave 1 geantwortet hat
|
59 | Serial.println("Slave 2 OK"); //Nach erfolgreichem Kommunikationsaufbau mit Slave 2 kurzer Statusbericht am Seriellen Monitor
|
60 | softserial.begin(9600); //Neustart der Software Seriellen Kommunikation um evtl. vorhandene Datenreste im Seriellen Puffer zu löschen (Theorie)
|
61 | delay(10); //10ms Delay
|
62 |
|
63 | while(softserial.available() < 16){ //Warte Solange bis mindestens 16 Werte im Seriellen Puffer vorhanden sind
|
64 | delay(1); //1ms Delay
|
65 | }
|
66 |
|
67 | //Messwerte von Slave 1 empfangen
|
68 | softserial.readBytes(Messwert2, 16); //16 Werte aus dem Seriellen Puffer in das Array "Messwert1" schreiben
|
69 |
|
70 | //Messwerte von Slave 2 "zusammensetzten"
|
71 | adc2_0 = Messwert2[0] << 8 | Messwert2[1]; //Der Messwert adc1_0 vom ADS1115, A0 am Slave 1 setzt sich aus den ersten beiden Einträgen im Array Messwert1
|
72 | adc2_1 = Messwert2[2] << 8 | Messwert2[3]; //Dazu wird mit Hilfe der Bitmath Operationen der 1. Wert (Messwert1[0]) um 8 Bits nach hinten verschoben
|
73 | adc2_2 = Messwert2[4] << 8 | Messwert2[5]; //Anschließend wird der 2. Wert mit der Bitwise Or funktion hinten angefügt. Es ensteht ein 16-Bit Integer.
|
74 | adc2_3 = Messwert2[6] << 8 | Messwert2[7]; //Die Operation wird für alle Messwerte wiederholt
|
75 | adc2_4 = Messwert2[8] << 8 | Messwert2[9];
|
76 | adc2_5 = Messwert2[10] << 8 | Messwert2[11];
|
77 | adc2_6 = Messwert2[12] << 8 | Messwert2[13];
|
78 | adc2_7 = Messwert2[14] << 8 | Messwert2[15];
|
79 |
|
80 |
|
81 | //Datenausgabe
|
82 | //Serielle Ausgabe der Messwerte mit anschließendem Tab
|
83 | Serial.println("Daten von Slave 1");
|
84 | Serial.print(adc1_0); Serial.print("\t");
|
85 | Serial.print(adc1_1); Serial.print("\t");
|
86 | Serial.print(adc1_2); Serial.print("\t");
|
87 | Serial.print(adc1_3); Serial.print("\t");
|
88 | Serial.print(adc1_4); Serial.print("\t");
|
89 | Serial.print(adc1_5); Serial.print("\t");
|
90 | Serial.print(adc1_6); Serial.print("\t");
|
91 | Serial.println(adc1_7);
|
92 | Serial.println("Daten von Slave 2");
|
93 | Serial.print(adc2_0); Serial.print("\t");
|
94 | Serial.print(adc2_1); Serial.print("\t");
|
95 | Serial.print(adc2_2); Serial.print("\t");
|
96 | Serial.print(adc2_3); Serial.print("\t");
|
97 | Serial.print(adc2_4); Serial.print("\t");
|
98 | Serial.print(adc2_5); Serial.print("\t");
|
99 | Serial.print(adc2_6); Serial.print("\t");
|
100 | Serial.println(adc2_7);
|
101 | delay(25);
|
102 | }
|