Es gibt drei Tags auf die reagiert werden soll, bei anderen soll einfach nichts geschehen. Ich habe soweit diesen Code gebastelt und dabei wohl zu einfach gedacht, denn die Abfrage funktioniert nicht.
Das wird ja immer mehr an Leuten im Forum, die ihren RFID-Reader nicht ausgelesen bekommen!
Ich habe zwar keinen RFID-Reader, aber aufgrund des jetzt schon wieder auftretenden Dramas habe ich mir jetzt mal das Datenformat des Readers im Datenblatt angesehen.
Gesendet wird von dem RDM6300 Reader beim seriellen Auslesen offenbar folgendes:
- "Start Text" Steuerzeichen ASCII-2 (1 Byte)
- 10 ASCII Zeichen "Nummer" (10 Bytes)
- 2 ASCII Zeichen "Prüfnummer" (2 Bytes)
- "End Text" Steuerzeichen ASCII-3 (1 Byte)
Ich habe nun mal "blind" einen Code dafür gebastelt.
Es gibt im Demo-Code drei Nummern für Mike, Bill und Bob, die erkannt werden können.
Im Echtbetrieb testen kann ich den Code nicht, wie gesagt, ich habe keinen solchen Reader.
Falls der Reader nicht an der Hardware-Serial angeschlossen ist, sondern an einer Soft-Serial, müssen natürlich alle read-Lesebefehle auf die tatsächlich verwendete Serial-Schnittstelle umgeschrieben werden.
Vielleicht haut's ja direkt hin.
// RFID demo sketch by "jurs" for Arduino Forum Deutsch
// start text character
#define STX 2
// end text character
#define ETX 3
// buffer to hold the last code read from Serial
char rfidBufferLastRead[13];
boolean readRFID()
{
if (!Serial.available()) return(false); // nothing available to read
char rfidBuffer[13];
char c=0;
int i=0;
memset(rfidBuffer,0,sizeof(rfidBuffer)); // clear receive buffer
delay(50); // wait for code to appear in the Serial input buffer
while (Serial.available()&& c!=STX) // watch out for start of text character
c=Serial.read();
while (Serial.available()&& i<12 && c!=ETX) // watch out for end of text character
{
c=Serial.read();
rfidBuffer[i] = c;
i++;
}
if (i!=12) return(false); // less than 12 characters read from Serial
if (Serial.available()) c=Serial.read();
if (c!=ETX) return(false);
strncpy(rfidBufferLastRead,rfidBuffer,sizeof(rfidBuffer)); // copy into global variable rfidBufferLastRead
return(true); // if we reach this line, we have read 12 digits from Serial
}
void setup()
{
Serial.begin(9600);
Serial.println("waiting for RFID...");
}
void loop()
{
if (readRFID())
{
if (strcmp(rfidBufferLastRead,"2800C4C02804")==0)
Serial.println("Hello Mike!");
else if (strcmp(rfidBufferLastRead,"123456789012")==0)
Serial.println("Hello Bill!");
else if (strcmp(rfidBufferLastRead,"800C4C028042")==0)
Serial.println("Hello Bob!");
else
{
Serial.print("Fuck off! ");
Serial.println(rfidBufferLastRead);
}
}
}