// https://www.programmingelectronics.com/serial-read/
// https://www.delftstack.com/de/howto/arduino/arduino-serial-read-string/
// Daten als String zusammensetzen, senden und String dann wieder zuerlegen und in entsprechend konvertierten Variablen speichern
String i1 = "#1 ";
String i2 = " #2 ";
String i3 = " #3 ";
String i4 = "%";
String o1 = " ";
String o2 = " ";
String o3 = " ";
String incomingDataString;
int temp1 = -2170;
float temp2 = 1024.5;
int temp3 = 1012;
int rtemp1 = 0;
float rtemp2 = 0;
int rtemp3 = 0;
int pos1 = 0;
int pos2 = 0;
int pos3 = 0;
int pos4 = 0;
int len1 = 0;
int len2 = 0;
int len3 = 0;
int rlen1 = 0;
int rlen2 = 0;
int rlen3 = 0;
void setup() {
// den MessdatenString erstellen (Sender)
String incomingDataString = i1 + temp1 + i2 + temp2 + i3 + temp3 + i4;
Serial.begin(9600);
Serial.println(incomingDataString);
// Mesddatenstring auslesen und in Variablen speichern (Empfänger)
pos1 = incomingDataString.indexOf(i1) + 3;
pos2 = incomingDataString.indexOf(i2) + 4;
pos3 = incomingDataString.indexOf(i3) + 4;
pos4 = incomingDataString.indexOf(i4);
len1 = incomingDataString.indexOf(i2) + 1 - pos1;
len2 = incomingDataString.indexOf(i3) - pos2;
len3 = incomingDataString.indexOf(i4) - pos3;
Serial.println("die erste Position des Messwerts im String");
Serial.println(pos1);
Serial.println(pos2);
Serial.println(pos3);
Serial.println(pos4);
Serial.println();
Serial.println("die erste Länge des Messwerts im String");
Serial.println(len1);
Serial.println(len2);
Serial.println(len3);
Serial.println();
Serial.println("die extrahierten Messwerte aus dem String als String und deren Länge");
o1 = incomingDataString.substring(pos1, (pos1 + len1));// der gesendete Wert als STRING
o2 = incomingDataString.substring(pos2, (pos2 + len2));// der gesendete Wert als STRING
o3 = incomingDataString.substring(pos3, (pos3 + len3));// der gesendete Wert als STRING
rlen1 = o1.length();
rlen2 = o2.length();
rlen3 = o3.length();
Serial.println(o1 + " " + rlen1);
Serial.println(o2 + " " + rlen2);
Serial.println(o3 + " " + rlen3) ;
Serial.println();
Serial.println("die umgewandelten Messwerte in INT oder FLOAT jeweils + 1 gerechnet");
rtemp1 = o1.toInt(); // der gesendete Wert wieder als INT
rtemp2 = o2.toFloat(); // der gesendete Wert wieder als FLOAT
rtemp3 = o3.toInt(); // der gesendete Wert wieder als INT
Serial.println(rtemp1+1);
Serial.println(rtemp2+1);
Serial.println(rtemp3+1);
Serial.println("Damit hat das Auslesen und Umwandeln funktioniert");
}
void loop() {
if (Serial.available()) {
incomingDataString = Serial.readString();
}
}
/*
// Einlesen der Daten aus dem seriellen Puffer in einen String
String incomingDataString;
char myChar = '%'; // Datenende
void setup() { Serial.begin(9600); }
void loop() {
if (Serial.available()) {
incomingDataString = Serial.readStringUntil(myChar);
Serial.println(incomingDataString);
}
}
*/