Hallo zusammen,
ich möchte Daten zwischen zwei Arduinos austauschen - soweit so klar.
Ein erster Test funktioniert soweit - jetzt sitze ich an den Feinheiten.
Ich möchte relativ viele floats übertragen (Messwerte von DHT22 Sensor und Messwerte einer Batterie).
Kann ich einfache
dtostrf(g_Batterie_Spannung, 0, 2, buffer); // dtostrf(val, width, precision, buffer);
Serial1.println(buffer);
dtostrf(g_Solar_Spannung, 0, 2, buffer); // dtostrf(val, width, precision, buffer);
Serial1.println(buffer);
dtostrf(g_Solar_Strom, 0, 2, buffer); // dtostrf(val, width, precision, buffer);
Serial1.println(buffer);
etc.
aufrufen oder wird das nicht funktionieren und ich sollte vor jeder Übertragung noch auf einen Start des Master Arduino warten?
Evtl Switch Case und pro Case einen Messwert schicken ala:
switch (Kommando) {
case 0:
dtostrf(g_Batterie_Spannung, 0, 2, buffer); // dtostrf(val, width, precision, buffer);
Serial1.println(buffer);
break;
case 1:
dtostrf(g_Solar_Spannung, 0, 2, buffer); // dtostrf(val, width, precision, buffer);
Serial1.println(buffer);
break;
default:
break;
}
Zeitkritisch ist der Abruf nicht - mir reicht es, wenn die Werte jede Minute aktualisiert werden (Mittelwerte kann ich im Slave bilden).
So Teil zwei was ich noch ziemlich bescheiden gelöst habe ->
Beim Test konnte ich immer nur 3 Messwerte übertragen, dann hat der Arduino nichts mehr gelesen. Vermutung lag auf vollem Puffer. Mit dem "Trick"
Serial.end();
Serial.begin(115200);
wurde das Problem behoben - ich weiß dämlich, aber auf die Schnelle hat es funktioniert.
Das Lesen sah so aus
while (Serial1.available()) {
if(stringComplete == false){
inChar = (char)Serial1.read();
inputString += inChar;
Serial.println(inChar);
if (inChar == '\n') {
stringComplete = true;
Ich dachte bei Serial.read wird dann beim lesen das gelesene gelöscht?
Sollte man hier anstelle von
"while (Serial1.available()) {"
besser
"while (Serial1.read() >=0) {"
verwenden?
Viele Grüße
Oliver