Pages: [1]   Go Down
Author Topic: Serial.read() in HEX, XOR und andere Fragen  (Read 1257 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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:
if( (hexarray[0]) ^ (hexarray[1]) ^ ... (hexarray[9]) == check)
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1397
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :-)
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 235
Posts: 20221
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
hexarray[z]= String(Serial.read(),HEX); 
Laß den String weg.
Code:
hexarray[z]= Serial.read(); 
Dann müßte der XOR Wert auch stimmen.
Grüße UWe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Berlin
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Open source hardware and mobile enthusiast, Mobile Software Developer, Author, DIY Maker, infrequent guitar player and MakerBot Operator.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: