Hallo und guten Abend Arduino-Gemeinde, ich bin als blutjunger Anfänger mal wieder komplett überfordert.
In meinem Projekt gehts darum, Serial-Daten von einem Computer einzulesen aufzuteilen (bis dahin funktioniert es Dank agmue und xy-projekt.) Nun möchte ich die Daten gern noch über NRF24 an diverse mehrere Anzeigen versenden.
Alles was ich bis jetzt hinbekommen habe ist das ich einen Struct sauber versenden und empfangen kann, aber eben nur einen. Sobald ich einen zweiten hinterher sende kommt nur Datenmüll heraus. Frage ist es den überhaupt möglich mehrere unterschiedliche Datensätze zu versenden.
Bedanke mich vorab, für Eure Hilfe.
[code]
#include <Wire.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
// Variablen für die zu versendenen Daten
struct Daten {
unsigned int BRZv;
unsigned int BRZn;
char BRF[20];
int BRS;
} Info;
struct Daten1 {
int Ar1;
unsigned int RZ1v;
unsigned int RZ1n;
char F1[20];
} Spur1;
struct Daten2 {
int Ar2;
unsigned int RZ2v;
unsigned int RZ2n;
char F2[20];
} Spur2;
struct Daten3 {
int Ar3;
unsigned int RZ3v;
unsigned int RZ3n;
char F3[20];
} Spur3;
struct Daten4 {
int Ar4;
unsigned int RZ4v;
unsigned int RZ4n;
char F4[20];
} Spur4;
// Reserve falls Bahn ausgebaut wird
struct Daten5 {
int Ar5;
unsigned int RZ5v;
unsigned int RZ5n;
char F5[20];
} Spur5;
// Reserve falls Bahn ausgebaut wird
struct Daten6 {
int Ar6;
unsigned int RZ6v;
unsigned int RZ6n;
char F6[20];
} Spur6;
const byte address[6] = "00001"; // Sender-Adresse
RF24 radio(9, 10); // CE, CSN - die Zahlen geben die Digitalports am Arduino an, Instatz um das Modul zu starten
const byte numChars = 40;
char buf[numChars];
const byte brf_1 = 20;
char brf[brf_1];
const byte f1_l = 20;
char f1[f1_l];
const byte f2_2 = 20;
char f2[f2_2];
const byte f3_3 = 20;
char f3[f3_3];
const byte f4_4 = 20;
char f4[f4_4];
const byte f5_5 = 20; // Reserve falls Bahn erweitert wird
char f5[f5_5];
const byte f6_6 = 20; // Reserve falls Bahn erweitert wird
char f6[f6_6];
void setup() {
Serial.begin(9600);
radio.begin(); // Start der 2,4 GHz Wireless Kommunikation
radio.openWritingPipe(address); // Setzen der Sendeadresse
radio.setDataRate(RF24_1MBPS); // Setzen der Übertragungsgeschwindigkeit
radio.setPALevel(RF24_PA_HIGH); // Leistung des NRF(MAX,HIGH,LOW,MIN)
radio.stopListening(); // Das angeschlossene Modul als Sender konfiguriert
}
void loop() {
// BRZ:6,777 ; BRF:TEXT ; BRS:4 ; AR1:0 ; RZ1:0,000 ; F1:TEXT ; AR2:0 ; RZ2:0,000 ; F2:TEXT ; AR3:0 ; RZ3:0,000 ; F3:TEXT ; AR4:0 ; RZ4:0,000 ; F4:TEXT;
static uint16_t ndx = 0;
char rc;
while (Serial.available() > 0) {
rc = Serial.read();
//Serial.print(rc);
if (rc == ';') {
buf[ndx] = '\0';
ndx = 0;
char * bez = strtok(buf, ":");
char * inh = strtok(NULL, ":");
char buf2[8];
if (!strncmp(bez, "BRZ", numChars)) { // Beste Rundenzeit von Heute
sscanf(inh, "%i,%s", &Info.BRZv, &buf2);
Info.BRZn = atoi(buf2);
//rz = vorkomma + (atoi(buf2) / 1000.0);
}
if (!strncmp(bez, "BRF", numChars)) { // Bester Fahrer von Heute
//strncpy ( f1, inh, f1_l );
strncpy (Info.BRF, inh, brf_1 );
}
if (!strncmp(bez, "BRS", numChars)) { // Beste Runde auf Spur X
Info.BRS = atoi(inh);
//radio.write(&Info, sizeof(Info));
//DatenSenden;
}
if (!strncmp(bez, "AR1", numChars)) { // Runden von Spur 1
Spur1.Ar1 = atoi(inh);
}
if (!strncmp(bez, "RZ1", numChars)) { // Rundenzeit Vorkomma / Nachkomma von Spur 1
sscanf(inh, "%i,%s", &Spur1.RZ1v, &buf2);
Spur1.RZ1n = atoi(buf2);
//rz = vorkomma + (atoi(buf2) / 1000.0);
}
if (!strncmp(bez, "F1", numChars)) { // Fahrername von Spur 1
strncpy (Spur1.F1, inh, f1_l );
radio.write(&Spur1, sizeof(Spur1));
if (!strncmp(bez, "AR2", numChars)) { // Runden von Spur 2
Spur2.Ar2 = atoi(inh);
}
if (!strncmp(bez, "RZ2", numChars)) { // Rundenzeit Vorkomma / Nachkomma von Spur 2
sscanf(inh, "%i,%s", &Spur2.RZ2v, &buf2);
Spur2.RZ2n = atoi(buf2);
//rz = vorkomma + (atoi(buf2) / 1000.0);
}
if (!strncmp(bez, "F2", numChars)) { // Fahrername von Spur 2
strncpy (Spur2.F2, inh, f2_2 );
// radio.write(&Spur2, sizeof(Spur2));
}
if (!strncmp(bez, "AR3", numChars)) { // Runden von Spur 3
Spur3.Ar3 = atoi(inh);
}
if (!strncmp(bez, "RZ3", numChars)) { // Rundenzeit Vorkomma / Nachkomma von Spur 3
sscanf(inh, "%i,%s", &Spur3.RZ3v, &buf2);
Spur3.RZ3n = atoi(buf2);
//rz = vorkomma + (atoi(buf2) / 1000.0);
}
if (!strncmp(bez, "F3", numChars)) { // Fahrername von Spur 3
strncpy (Spur3.F3, inh, f3_3 );
// radio.write(&Spur3, sizeof(Spur3));
}
if (!strncmp(bez, "AR4", numChars)) { // Runden von Spur 4
Spur4.Ar4 = atoi(inh);
}
if (!strncmp(bez, "RZ4", numChars)) { // Rundenzeit Vorkomma / Nachkomma von Spur 4
sscanf(inh, "%i,%s", &Spur4.RZ4v, &buf2);
Spur4.RZ4n = atoi(buf2);
//rz = vorkomma + (atoi(buf2) / 1000.0);
}
if (!strncmp(bez, "F4", numChars)) { // Fahrername von Spur 4
strncpy (Spur4.F4, inh, f4_4 );
// radio.write(&Spur4, sizeof(Spur4));
}
}
}
else {
buf[ndx] = rc;
ndx = (1 + ndx) % numChars;
}
}
}
void DatenSenden()
{
Serial.println("sende!");
radio.write(&Info, sizeof(Info)); // Senden der Bahnrekorde zum Empfänger
//radio.write(&Spur1, sizeof(Spur1)); // Senden der Spur1-Daten zum Empfänger
//radio.write(&Spur2, sizeof(Spur2)); // Senden der Spur2-Daten zum Empfänger
//radio.write(&Spur3, sizeof(Spur3)); // Senden der Spur3-Daten zum Empfänger
//radio.write(&Spur4, sizeof(Spur4)); // Senden der Spur4-Daten zum Empfänger
//radio.write(&Spur5, sizeof(Spur5)); // Senden der Spur6-Daten zum Empfänger Reserve falls Bahn erweitert wird
//radio.write(&Spur6, sizeof(Spur6)); // Senden der Spur6-Daten zum Empfänger Reserve falls Bahn erweitert wird
}
[/code]

