Hallo zusammen
Ich habe ein Projekt in dem ich RFID Karten lesen muss und dann einen BCD Code 0-31 erzeugen soll.
Es sollen jeweils fünf Karten den selben BCD Code zurückliefern. (ergibt 31 Codes mal 5 Karten = 155 Karten)
Dies habe ich auch hingekriegt, nur das wenn ich mehr als 16 String Array mit 5 10stelligen Zahlen
definiere mir der Arduino in die Knie geht(das nehme ich zumindest an).
Jetzt möchte ich die Kartennummern in HEX anlegen was mir auch gelungen ist...
Was ich allerdings nicht hinkriege ist die Umwandlung vom String in HEX den mir der Kartenleser ausgibt um danach
die Zahlen vergleichen zu können. Wie muss ich das anstellen?
Hier der ganze Code (Das auslesen von RFID Leser ist von http://macherzin.net/article66-Arduino-und-RFID-Leser)
//#define debug
#include <SoftwareSerial.h> // nutzen virtuellen seriellen Port
//Initialisierung Kommunikation RFID Leser ---------------------------------------------------
const int rxPin = 3; // RX an Pin D3 ...
const int txPin = -1; // und TX an PinD4 (wird hier nicht benoetigt)
const int rfidBaud = 9600; // Geschwindigkeit fuer serielle Kommunikation
SoftwareSerial rfid(rxPin, txPin); // virtueller serieller Port an Pin D3 und D4
//ENDE Initialisierung Kommunikation RFID Leser ----------------------------------------------
const int startZeichen = 02; // Chip-Kennung beginnt mit 02
const int endeZeichen = 03; // ASCII CR bendet Code
const int kennungLaenge = 10; // Laenge Chip-Code 10 ASCII-Zeichen
const int gesamtKennungLaenge = 10; // Code-Laenge + Start- und Ende-Byte
char code[kennungLaenge + 1]; // fuer den Code und abschliessende Null
int bytesGelesen = 0;
int zaehlerFehlerCode = 0;
String codex = "0000000000"; // ungueltiger Zugangscode
int Codierung = 0;
int zaehler = 0;
int hilfsvarBCD = 0;
const int BCD1 = 9; // BCD Out 1
const int BCD2 = 10; // BCD Out 2
const int BCD4 = 11; // BCD Out 4
const int BCD8 = 12; // BCD Out 8
const int BCD16 = 13; // BCD Out 16
// Kartennummernspeicher *********************************************************************************************************************************************************
//Platzhalter für Karten Codierung 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
//byte code1[][5] = {{0x03,0x00,0x30,0x03,0x18},{0x03,0x00,0x30,0x03,0x18},{0x03,0x00,0x30,0x03,0x18},{0x03,0x00,0x30,0x03,0x18},{0x03,0x00,0x30,0x03,0x18}};
//Platzhalter für Karten Codierung 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
String code1[5] = {"0300300318","0000000001","0000000001","0000000001","0000000001"};
//Platzhalter für Karten Codierung 2 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
String code2[5] = {"0000000002","0000000002","0000000002","0000000002","0000000002"};
//Platzhalter für Karten Codierung 3 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
String code3[5] = {"0000000003","0000000003","0000000003","0300300317","0000000003"};
//usw......
// ENDE Kartennummernspeicher *********************************************************************************************************************************************************
void setup()
{
//#ifdef debug
Serial.begin(9600); // initialisiere serielle Konsole
//#endif
rfid.begin(rfidBaud); // initialisiere virtuellen seriellen Port
#ifdef debug
Serial.println("RFID-Leser bereit ... ");
#endif
// Ein / Ausgänge
pinMode(BCD1, OUTPUT);
pinMode(BCD2, OUTPUT);
pinMode(BCD4, OUTPUT);
pinMode(BCD8, OUTPUT);
pinMode(BCD16, OUTPUT);
digitalWrite(BCD1, LOW);
digitalWrite(BCD2, LOW);
digitalWrite(BCD4, LOW);
digitalWrite(BCD8, LOW);
digitalWrite(BCD16, LOW);
}
void loop()
{
// START auslesen RFID Code ----------------------------------------------------------------------------------
Serial.flush();
if (rfid.available() >= gesamtKennungLaenge) // wenn genug Zeichen eingegangen ...
{
if(rfid.read() == startZeichen) // und das Startzeichen erkannt wurde ...
{
#ifdef debug
Serial.print("Start-Byte erkannt ... ");
#endif
bytesGelesen = 0; // starten Lesen, also Zaehler auf 0
while(bytesGelesen < kennungLaenge) // lese 10-stelligen Code
{
char zeichen = rfid.read(); // lesen Zeichen
#ifdef debug
Serial.print(zeichen); // zur Kontrolle
Serial.print(" ");
#endif
if(zeichen == endeZeichen) // suche nach Ende-Befehl
{
#ifdef debug
Serial.println("CR erkannt ...");
#endif
break;
}
code[bytesGelesen] = zeichen; // speicher Zeichen im Puffer
bytesGelesen = bytesGelesen + 1; // ein Zeichen weiter
}
code[bytesGelesen] = 0; // beende Zeichenkette
#ifdef debug
Serial.print("RFID-Code lautet: ");
Serial.println(code);
#endif
codex = code; // Umwandlung Code in String
}
}
else
{codex = "0000000000";}
// ENDE auslesen RFID Code ---------------------------------------------------------------------------------------
// Codierung generieren ------------------------------------------------------------------------------------------
#ifdef debug
Serial.print("Codex = ");
Serial.println(codex);
#endif
// keine Codierung
if (codex == "0000000000")
{
zaehler++;
if (zaehler <= 5000)
{}
else
{Codierung = 0; zaehler = 0;}
}
else
{zaehler = 0;}
//1. Codierung
for (int x = 0; x <5; x++)
{if (codex == code1[x])
{Codierung = 1;break;}
}
//2. Codierung
for (int x = 0; x <5; x++)
{if (codex == code2[x])
{Codierung = 2;break;}
}
//3. Codierung
for (int x = 0; x <5; x++)
{if (codex == code3[x])
{Codierung = 3;break;}
}
//usw...
#ifdef debug
Serial.print("Codierung = ");
Serial.println(Codierung);
Serial.print("zaehler = ");
Serial.println(zaehler);
#endif
// ENDE Codierung generieren ---------------------------------------------------------------------------------------
// BCD Code generieren ---------------------------------------------------------------------------------------------
hilfsvarBCD = Codierung;
#ifdef debug
Serial.print("hilfsvarBCD ");
Serial.println(hilfsvarBCD);
#endif
//16
if (hilfsvarBCD >= 16)
{
digitalWrite(BCD16, HIGH);
hilfsvarBCD = hilfsvarBCD - 16;
}
else
{digitalWrite(BCD16, LOW);}
//8
if (hilfsvarBCD >= 8)
{
digitalWrite(BCD8, HIGH);
hilfsvarBCD = hilfsvarBCD - 8;
}
else
{digitalWrite(BCD8, LOW);}
//4
if (hilfsvarBCD >= 4)
{
digitalWrite(BCD4, HIGH);
hilfsvarBCD = hilfsvarBCD - 4;
}
else
{digitalWrite(BCD4, LOW);}
//2
if (hilfsvarBCD >= 2)
{
digitalWrite(BCD2, HIGH);
hilfsvarBCD = hilfsvarBCD - 2;
}
else
{digitalWrite(BCD2, LOW);}
//1
if (hilfsvarBCD == 1)
{
digitalWrite(BCD1, HIGH);
}
else
{digitalWrite(BCD1, LOW);}
// ENDE BCD Code generieren ----------------------------------------------------------------------------------------
// Codierung auf 7 Segment Anzeige Ausgeben
}