gestern Abend bin ich verzweifelt ins Bett gefallen... ich habe es nicht hinbekommen. Ich möchte, per SoftwareSerial, von einem Uno zum anderen die aktuelle Leistung meiner PV übergeben.
Der Sender-Uno schickt per: mySerial.println(watt); einen Wert von 0 - 9999 an den zweiten Uno.
Dort kommt meist auch der Wert an... jedoch immer wieder mit Fehler, Sonderzeichen oder fehlenden Ziffern.
Da ich schon diverse Beispiele ausprobiert habe, möchte ich mich jetzt an Euch wenden.
Der Empfänger-Uno sieht so aus:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10,11);
int i;
char X_buffer[5];
int watt;
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
}
void loop()
{
i=0;
if (mySerial.available())
{
while (i < 4)
{
X_buffer[i] = mySerial.read();
delay (1);
Serial.print(X_buffer[i]);
i++;
}
// watt = ???? //hier soll der empfange Wert gespeichert werden
}
}
Wie kann ich relativ sicher, die X_buffer empfangen und dann in eine Integer umwandeln....
Versuch's mal so. Delays einzubauen, um nicht zu schnell zu lesen, ist eine dumme Idee. Besser ist warten, bis die gewünschte Anzahl erreicht ist oder gleich einen sauberen Parser zu bauen, der jedes empfangene Zeichen gleich interpretiert.
void loop()
{
i=0;
if (mySerial.available() >= 4) {
while (i < 4) {
X_buffer[i] = mySerial.read();
Serial.print(X_buffer[i]);
i++;
}
// watt = ???? //hier soll der empfange Wert gespeichert werden
}
}
Du solltest Dir auch überlegen, wie Du synchronisierst, also Start- bzw. Stopp-Zeichen einbauen, damit Du weisst, wo eine Zahl oder ein Kommando beginnt und wo es endet.
Delays einzubauen, um nicht zu schnell zu lesen, ist eine dumme Idee. Besser ist warten, bis die gewünschte Anzahl erreicht ist oder gleich einen sauberen Parser zu bauen, der jedes empfangene Zeichen gleich interpretiert.
Wenn man die "gewünschte Anzahl" kennt, hast du recht. Meist gibt es ja auch ein Stop-Zeichen ( NewLine oder so )
Wenn nicht, und das einzige was man weiss ist, dass die Daten "am Stück" kommen, ist ein passendes kleines Delay zumindest einfach, und wenn der Uno sonst nicht viel zu tun hat, auch nicht so dumm dass man sich deswegen schämen müsste.