Jetzt ist meine Frage im moment ist das ja nur ein Befehl.
Wie sieht das aus wenn es mehrer und auch mit unterschiedler Länge sind.
kann man das irgendwie kürzer schreiben ohne so viele Serial.print().
Die Befehle sollen dann nacheinander abgearbeitet werden.
Du rechnest gar nichts in HEX um. Du gibst die Zahlen nur als Hexwerte auf die serielle Schnittstelle aus.
Der Kontroller rechnet intern binär und alles andere sind nur Darstellungsformen für den Menschen.
Ich will von meinem Arduino den befehl 49f0 + Checksumme [ als Hexwerte an mien Gerät senden.
Es sollen mehrere Befehle hinzukommen wie z.B 49f1 .... diese sollen dann der Reihe nach abgearbeitet werden.
Alle Befehle sollen als HEX übermittelt werden.
nomis321:
Ich will von meinem Arduino den befehl 49f0 + Checksumme [ als Hexwerte an mien Gerät senden.
Es sollen mehrere Befehle hinzukommen wie z.B 49f1 .... diese sollen dann der Reihe nach abgearbeitet werden.
Alle Befehle sollen als HEX übermittelt werden.
Was meinst du mit "Befehl 49f0" ?
Du solltest dich schon verständlicher ausdrücken.
Dein Sketch braucht Anweisungen und 49f0 ist ein Wert, den du per Anweisung übergibst.
Meinst du das ?
Ja 49f0 ist eine Anweisung diese steht z.B. für Module aus.
Tut mit leid wenn ich mich nicht so gut ausdrücke mach das zum ersten mal.
Diese Anweisung soll dann als HEX an mein Gerät übermittelt werden.
Wenn dieses antwortet soll die nächste Anweisung gesendet werden.
Vllt kann mir jemand auch hier weiterhelfen.
ich nutze folgenden Code:
char test1[]="49f0";
char test2[]="49f1";
int eingang;
int i;
void setup() {
Serial.begin(115200);
}
void hex(String test)
{
for (i = 0; i < sizeof(test) -1; i++)
{
Serial.print(test[i], HEX);
}
char checksumme = test[0] ^ test[1] ^ test[2] ^ test[3];
Serial.print(checksumme, HEX);
}
void loop() {
if (Serial.available()>0)
{
eingang=Serial.read();
if (eingang=='1')
{
hex(test1);
Serial.print(" ");
hex(test2);
}}}
Gibt es eine möglichkeit wie ich bei der Berechnung der Checksumme die länge automatisch erkenen kann?
Als das auch längere anweisung funktionieren.
und kann mir jemand sagen warum ich als Ausgabe 3439663005B 3439663105A bekomme.
und nicht 343966305B 343966315A.
übertragen wird immer binär. Du änderst nur immer die Darstellungsform, also die Schreibweise des Wertes! Ob du das nun dezimal oder hexadezimal oder oktal notierst ist dabei Jacke wie Hose. Der Wert selbst ändert sich nicht. Zwischen 0xFF und 255 gibts keinen Unterschied, außer der Schreibweise. An der seriellen Übertragung ändert das auch nichts, für den Wert 0xFF oder 255 wird 8x logisch 1 übertragen. Ob du x auf 255 oder auf 0xFF vergleichst ist wie gesagt Jacke wie Hose. Das muss dir klar werden.
Für die Checksummenberechnung gibts eine fertige Lib. Einfach nutzen. Google nach avr crc lib
Ich empfehle für die Datenübertragung ein festes Protokoll.