Ich würde gerne mit einem Arduino über Serial mit einer Autoterm Air 2D Heizung kommunizieren.
Allerding ist mein Wissen was den Aufbau von Serieller Kommunikation angeht gleich null.
Daher wäre ich sehr dankbar um jede Hilfe.
Frage: Die Hardware - incl. USB/Serial-Adapter hast Du?
Das Protokoll ist recht einfach gestrickt.
Was willst Du machen?
Auf einem Display anzeigen und mit ein paar Buttons ein/aus schalten?
Was noch?
Schreib mal drei Worte zu Deinem Vorhaben...
... zum Ziel:
Langfristig soll der Arduino als als Brücke zwischen einem CAN-Bus System, und der Heizung dienen. Und dabei die Befehle aus dem CAN an die Heizung weiterleiten. Sowie die Temperatur und den Fehlercode auslesen.
Kurzfristig werde ich erstmal Taster für EIN und AUS anschließen und die Temperatur nur auf dem SerialMonitor ausgeben.
... zur Hardware:
Als Hardware soll ein Arduino Micro etc. zum Einsatz kommen der mit der Heizung kommuniziert. Dabei soll die Serielle Schnittstelle bzw. Softserial des Arduinos genutzt werden.
... zur Software:
Mir geht es in erster Linie darum wie ich das Eingelesene so zerlege um die nötigen Infos daraus zu ziehen. Bzw wie ich die die Befehle passend Verpacke.
Irgendwie fehlt mir noch...
Wenn man Dir was an die Hand gibt, bekommst Du das aufgespiekt und kannst dazu live Kommunikation aufbauen?
Ich würde Dir zum Verständnis wie man mit dem Ding kommuniziert Schritt für Schritt was schreiben, bin aber drauf angewiesen dass Du das auch nutzen kannst und mir erzählst was das Ergebnis ist.
Die Serial Basics die noiasca repostet hat, haben mir schon etwas geholfen.
Einfache serielle Kommunikation wie im Beispiel 1&2 habe ich auch schon mal gemacht.
Nur bei aufeinander folgende Hex-Werten hörte dann mein Wissen auf.
Dank dem Beispiel 6 habe ich schon mal einen Überblick.
Wenn du (my_xy_projekt) bereit wärst mir etwas vorzubereiten, was ich dann weiter ausbauen kann, wäre ich sehr dankbar.
Die Vorbereitung kannst du zum größten Teil selbst machen:
Vergleiche bei den Header-Bytes welche Bytes haben immer den gleichen Wert
welche Bytes haben unterschiedliche Werte.
Die Header-Bytes die immer den gleichen Wert haben kann man als Startbyte nehmen
Das ist dann das Serial Inputbeispiel mit Anfangserkennung
Du kannst dir die hexadezimalen Werte mit tausenden onlinetools auf dezimal umrechnen
oder du schreibst die hexadezimalen Werte mit einem vorangestellten "0x"
Ich bau Dir zu morgen was zusammen.
Was für einen Controller hast Du jetzt zur Verfügung?
Im ersten Schritt würde ich nur Zustände auslesen lassen und auf dem Seriellen Monitor ausgeben.
Da sind dann so basics drin wie crc berechnen, message senden und einlesen auf der Seriellen. Das reicht dann für alles andere.
Der Start Marker in meinem Falle ist dann ja x0AA . byte startMarker = 0xAA;
Wie wäre in meinem Falle der Endmarker? Gibt es in dem Falle überhaupt einen?
Theoretisch bildet ja die Checksum immer das Ende.
Die Anzahl der zu erwartenden Bytes müsste dann ja 8 sein, richtig? const byte numBytes = 8;
Versuche mal, wenn ich wieder an der Hardware bin mit den Werten und dem Beispiel zu testen.
@my_xy_projekt Am liebsten würde ich das ganze mit einem Micro lösen. Der ist von der Baugröße nicht so groß. Sollte es ein anderes Board besser geeignet sein bin ich dafür auch offen.
nicht immer
Das variiert dann doch ziemlich stark. Abhängig vom fünften Headerbyte
Für 0x01 turn heater on sind es mit checksum 8 bytes
für 0x06 getversion sind es mit checkusm 7 bytes
für 0x0F get status sind es mit checksum 21 bytes
im dritten byte des headers steht die Anzahl der payload-bytes.
Daraus ergibt sich dann die Position der Checksum-bytes.
Ob man eine gültige Message empfangen hat wird dann anhand der Checksumme geprüft.
Die Bytes vor der checksum werden mit dem checksum algorithmus miteinander verwurstet.
Message ist gültig wenn die errechnete checksum mit der empfangenen checksum übereinstimmt.