Go Down

Topic: Serial.read() in HEX, XOR und andere Fragen (Read 1 time) previous topic - next topic

aargau

Ich bin neu in der Arduino Programmierung und habe nun ein paar Fragen welche ich so aus den Englischen Dokumentationen nicht entnehmen konnte.
Ich habe hier ein RFID Reader (RDM6300) und bin gerade daran die gelesenen Daten auf ein Display auszugeben (später soll ein txt file auf einer SD-Karte durchsucht werden nach der Berechtigung).
Nun habe ich hier einfach mal ein Arduino Beispiel verwendet und für mein Empfänger entsprechend Modifiziert.
Das auslesen klappt auch wunderbar, ich erhalte eine 10 Stellige Ausgabe und den Checksum wert.
Nun ist es ja so das die 10 Zeichen jeweils ein HEX wert in char (also "uns" lesbar) darstellt.
Wie aber kann ich diese 10 Zeichen in echtem HEX in ein array Speichern um danach die Checksumme zu kontrollieren?
Ich denke dies ist da viel zu mühsam?:
Code: [Select]

String hexarray[10] ;

void loop()
{
..
hexarray[z]= String(Serial.read(),HEX);
..
}


Dann habe ich zu der Auswertung eine weitere Frage.
Wenn ich nun danach die 10 HEX werte in meinem Array habe muss ich diese mittels XOR ausrechnen und mit der checksum vergleichen.
Nur wie vergleiche ich mehrere Werte mit XOR? Versucht habe ich:
Code: [Select]

if( (hexarray[0]) ^ (hexarray[1]) ^ ... (hexarray[9]) == check)


mkl0815

Stimmt, Du denkst zu kompliziert :-)
per Serial.read() liest Du schon eine Zahl, die Du ja nur per String(WERT,HEX) in eine Zeichenkette umwandelst. Beim Rechnen mit Zahlen ist es wurscht in welchem Zahlensystem die sind, denn Dein Arduino kennt eh nur das Binärsystem :-)

uwefed

Wie schon gesagt, die Darstellung im Hexadezimalsytem ist nur einen Darstellung und nicht ein Speichern in einer Variable. Darum brauchst Du Dir deswegen keine Gedanken machen.
Zur Berechnung der Checksumme:
Code: [Select]
hexarray[z]= String(Serial.read(),HEX); 
Laß den String weg.
Code: [Select]
hexarray[z]= Serial.read(); 
Dann müßte der XOR Wert auch stimmen.
Grüße UWe

aargau

Danke für eure Antworten!
Ich werde mir das morgen mal noch etwas genauer ansehen und das ganze dann auch Testen.

MarioBoehmer

Vielleicht hilft dir mein Blog post über den RDM630. Darin berechne und vergleiche ich die checksum mit der empfangenen checksum: http://marioboehmer.blogspot.de/2011/01/rfid-with-arduino.html

Go Up