Afmetingen in werking: 46 x 32 x 3 mm
Sketches om mee te werken:
rfid125khznummerlezer.ino
#include < SoftwareSerial.h >
SoftwareSerial RFID(4, 5); // RX en TX
int i;
int y = 1;
void setup()
{
RFID.begin(9600); // start RFID lezer
Serial.begin(9600); // start monitor
}
void loop()
{
if (RFID.available() > 0)
{
i = RFID.read();
Serial.print(i, DEC);
Serial.print(",");
y++;
}
if (y==15) {
Serial.println(" ");
y=1;
}
}
rfidkaartlezer.ino
#include
SoftwareSerial RFID(4, 5); // RX en TX
int data1 = 0;
int ok = -1;
int cont = 12;
int yes = 11;
int no = 6;
String str;
/* Gebruik eerst de sketch rfid125khznummerlezer.ino om de kaarten uit te lezen
Geef daarna de gevonden tekenreeks hieronder in
U kunt zoveel reeksen aanmaken als nodig...
Om te voorkomen, dat de kaart gelezen blijft worden gebruiken we in de sketch RFID.end()
Daarmee omzeilen we het probleem dat bijvoorbeeld een slot meerdere keren zou worden geopend.
*/
int tag1[14] = {
2, 48, 48, 48, 48, 48, 48, 48, 48, 49, 51, 49, 51, 3
};
int tag2[14] = {
2, 55, 66, 48, 48, 52, 55, 66, 66, 51, 57, 66, 69, 3
};
int tag3[14] = {
2, 55, 66, 48, 48, 52, 55, 55, 67, 54, 53, 50, 53, 3
};
int tag4[14] = {
2, 55, 66, 48, 48, 52, 55, 67, 48, 70, 53, 48, 57, 3
};
//Hieronder de controle reeks....
int newtag[14] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
int ledState = LOW;
// Normaal gebruikt u hier een "unsigned long" voor variabelen die tijd bevatten
// De waarde wordt anders al heel snel te groot voor een INT
unsigned long previousMillis = 0;
void setup() {
RFID.begin(9600); // start de RFID lezer
Serial.begin(9600); // start de monitor
pinMode(yes, OUTPUT); // voor status LEDs
pinMode(no, OUTPUT);
}
//Kaarten vergelijken
boolean comparetag(int aa[14], int bb[14])
{
boolean ff = false;
int fg = 0;
for (int cc = 0 ; cc < 14 ; cc++)
{
if (aa[cc] == bb[cc])
{
fg++;
}
}
if (fg == 14)
{
ff = true;
}
return ff;
}
//Kaarten controleren
void checkmytags() { // Vergelijkt elke reeks met de zojuist gelezen kaart.
ok = 0;
// Als de waarde 1 is, hebben we een match, 0 (nul) is gelezen maar geen overeenkomst,
// -1 is nog niet gelezen
Serial.println("Controleren");
for(int t=0;t<10;t++){
digitalWrite(cont, HIGH);
delay(250);
digitalWrite(cont, LOW);
delay(250);
}
if (comparetag(newtag, tag1) == true)
{
ok++;
str = "Chimpansee";
}
if (comparetag(newtag, tag2) == true)
{
ok++;
str = "Giraffe";
}
if (comparetag(newtag, tag3) == true)
{
ok++;
str = "Leeuw";
}
if (comparetag(newtag, tag4) == true)
{
ok++;
str = "Gazelle";
}
}
void readTags() {
ok = -1;
if (RFID.available() > 0) {
// Lees kaartnummers
delay(100); // Neem wat tijd om de inkomende data te verwerken.
for (int z = 0 ; z < 14 ; z++) // Lees de rest van de kaart
{
data1 = RFID.read();
newtag[z] = data1;
}
// Komen de reeksen overeen?
checkmytags();
}
if (RFID.available() < 1) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 1500) {
// Zie blink without delay
previousMillis = currentMillis;
// Led aan/uit en omgekeerd:
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
// Led aan uit naar gelang de variabele:
digitalWrite(cont, ledState);
}
}
// Nu een reactie op de gelezen kaart
if (ok > 0) // Als er een overeenkomst is
{
Serial.print("Toegang verleend aan ");
Serial.println(str);
digitalWrite(yes, HIGH);
RFID.end(); //Stop het lezen om de buffer te legen
delay(1000);//Pauze of deur open of.....vul maar in
RFID.begin(9600);//Start het lezen met een lege buffer
digitalWrite(yes, LOW);
ok = -1;
}
else if (ok == 0) // Indien niet overeenkomend
{
RFID.end();//Stop het lezen om de buffer te legen
Serial.println("Geen toegang");
Serial.println("Poging gelogd");
Serial.print("Kaartnummer ");
for (int s = 0; s < 14; s++) {
Serial.print(newtag[s]);
Serial.print(" ");
}
Serial.println(" ");
digitalWrite(no, HIGH);
delay(1000);
digitalWrite(no, LOW);
ok = -1;
RFID.begin(9600);//Start de lezer met een lege buffer
}
}
void loop()
{
readTags();
}