Hallo,
die Regeln sind:
-alle 15min 1mal, 9 Werte (Wert0…Wert8) zu übertragen
- max. 48 Werte (Wert0…Wert47) nur auf Anforderung (wenn Taster, dann) zu übertragen
(
Ich habe auf dem Nextion ein Diagramm, das mit diesen 48 Werten beliefert wird. Sie
werden dort in Variablen abgelegt. Kommt es auf dem Nextion zu einem Spannungsverlust
gehen diese Werte verloren. Mit der Anforderung (wenn Taste, dann) kann ich die Werte
wieder herstellen.
Kommt es auf dem Mega zu einem Spannungsverlust, werden mit der Anforderung (wenn Buttom, dann) 48 Werte vom Nextion zum Mega übertragen.
Kommt es auf dem Mega gleichzeitig mit dem Nextion zu einem Spannungsverlust, mache ich
dicke Backen.
- 1 Wert nur auf Anforderung (wenn Taster, dann) zu übertragen.
Der Wertebereich liegt zwischen int -60 bis 10858
Das sind die Regeln…
Stand der Dinge ist,
der mega hat über Nacht- bis in die späten Morgenstunden gesendet
und der Uno empfangen. Dabei ist es zu 7 Summenfehlern gekommen- kein
"Modulo '\n' Fehler.
Bei der Menge der Werte halte ich das schon für ziemlich gut. Über diese 7 Fehler
mache ich mir noch keine Gedanken. Zum einem ist es so, das die Anzahl zu gering ist,
zum anderem- die lassen sich ziemlich leicht unter Kontrolle bringen.
Ich kann hier sagen, das funktioniert.
D.h. für mich- wenn der Mega es an den Uno sendet, dann kann er es auch an das Nextion
senden. Wenn der Mega es an den Uno sendet, dann kann der Uno/das Nextion, es auch an
den Mega senden. In diesen Fällen, komme ich- da auf alle Fälle mit klar.
"byte stuffing"
Habe ich noch nie gehört, also in der Wiki mal einen Überblick verschafft. Wenn ich es
richtig verstanden habe, dann nutzt man es dazu- eine Datenverbindung, in Bezug auf die
Prüfung der Daten, richtig sicher zu machen.
Da ich hier keine Aktoren schalte, benötige ich das nicht. Auch das Handling der Geschichte
kommt mir als richtig schwerer Stoff vor.
XBee´s
Meine funken im 868MHz Band. Eingestellt habe ich nur die Id´s, die Adressen und das es
eine Point to Point Verbindung ist.
Betrieben werden die mit "echten" 868MHz-Antennen. Die Sendeleistung habe ich auf
2mW eingestellt.
Den Kanal habe ich fest auf Kanal 26 (868,35MHz) eingestellt.
Ich habe einen Reset-Taster konfiguriert, und einen Sende/EmpfangsTaster zu Prüfung
konfiguriert. Die Verschlüsselung habe ich ausgeschaltet. Dann habe ich noch eine
Status-LED konfiguriert. Diese gibt Auskunft über senden/empfangen und Fehler.
Der Rest steht auf Werkseinstellungen.
Man kann diese XBee´s so konfigurieren, das sie den gesamten Datenverkehr unter sich
selbst verwalten. Das fängt bei einer Fehlermeldung an, und hört auf mit- wie lange,
soll ich, in welchen Abständen, auf welchen Kanälen- versuchen etwas zu senden oder zu
empfangen. Diese XBee´s sind richtig fähig.
Nun bin ich dazu gekommen, die Sache mal mit 48 Werten zu probieren. Auf der Mega-
Seite habe ich mit:
Serial3.print(Wert0);
Serial3.print('\n');
…
Serial3.print(Wert47);
Serial3.print('\n');
delay(30000);
versucht aus Whandall´s Sketch etwas zu holen. Das ging erwartungsgemäß schief.
Zum einem weil ich keine reine Ziffer liefer, zum anderem weil im Sketch festgelegt
ist (mit, if (isdigit(got))) das nur Ziffern akzeptiert werden.
Ich habe aber auch Ziffer die < 0 sind, also Vorzeichen belastet.
Nun könnte man ja über die "Arduino String Character Analysis" etwas anderes definieren,
müßte dann aber in seinen Funktionen wahrscheinlich auch etwas ändern.
Also habe ich das erst einmal gelassen. Der Sketch gefällt mir aber besser als die jetzige
Lösung. Da bin ich noch nicht von ab.
Also habe ich wieder die alte Lösung genommen.
(char c = stream.read();)
Hier werden jetzt die Werte wieder mit ihrem Index (Wert23 in Werte[23]) geschrieben und
dann verarbeitet.
Das funktionierte selbstverständlich auch nicht, weil- dieses dreck´s TFT den ganzen
Uno ausbremst.
Gesendet wird so:
Serial3.print(Wert0);
Serial3.print('\n');
…
Serial3.print(Wert47);
Serial3.print('\n');
delay(30000);
Also den ganzen Sketch auf serielle Ausgabe umgestellt.
Das- hat aber auch nicht funktioniert. Der kommt bis Wert16, dann ist Schluss.
Dann die nächsten 16. Ist er einmal durch geht es bei 0 wieder weiter.
Der Zähler von '\n' läuft einwandfrei durch.
Der Inhalt von Wert x, ist aber nicht der eigentliche- MüllWerte.
Da scheint etwas mit dem Speicher, der Zeit, dem Arduino oder den XBee´s nicht zu
stimmen.
Wie michael_x schon sagte, was passiert wenn…
Dann habe ich probiert:
Serial3.print(Wert0);
Serial3.print('\n');
delay(50);
…
Serial3.print(Wert47);
Serial3.print('\n');
delay(30000);
Das funktioniert seid mehr als 2Std fehlerfrei. AAAber delay()- das geht nicht!
Ich weiß:
Wenn ich mit dem Mega an das Nextion 48 Werte sende, es zu keinen Problemen kommt.
Der Mega sendet das:
Serial2.print("WertLuft.val=");//Luft
Serial2.print(NexLuft);
Serial2.write(NexT,3);
Serial2.print("click Uebersicht,1");
Serial2.write(NexT,3);
aus einer Schleife.
Der Mega ist hier also raus. Bleiben XBee und Uno.
Beim XBee wüßte ich noch nicht, an was es liegen könnte. Es hat einen Speicher, ich
weiß aber noch nicht, ob dieser als Buffer auch genutzt wird.
Bleibt der Uno mit seiner "SoftwareSerial". Die habe ich gefressen.
Keine Ahnung, so richtig tickt es nicht.
An den Xbee´s möchte ich noch nicht fummel, ist gut möglich das ich mir dann die
nächste Baustelle aufmache.
Ich werde mir zu Ostern mal einen 2.ten Mega gönnen. Da habe ich wenigstens echte
Schnittstellen.
Dieser "SoftwareSerial" traue ich nicht übern Weg.
Es läuft erst einmal so tra,la,la- geht so. Wenn ich den Mega habe, melde ich mich
wieder.
Gruß und Dank
Andreas
;;;