Komma igång med RFID (11 / 13 steg)
Steg 11: Mjukvaran Program - fortsatte
Eftersom vi redan har den unika identifieraren från den tidigare koden, ska vi förvara den i systemet. När användaren kommer nära den ultrasonic sensorn, vilja den fråga om ett ID. När läsaren igenom, kontrollera att den matchar den som lagrats i systemet. Produktionen kommer att visas på den seriella monitorn samt olika lysdioder ON och OFF funktioner att ange matchande.
< p > / * programmet använder ID-12 läsare att läsa alla RFID-knappen eller kort och identifiera om detta ID är känd i systemet * / < br > / / innehålla en rubrik fil till... < br > #include SoftwareSerial mySerial(3,2); virtuell serieport / / / < br > int R_LED = 7. PIN-kod knuten till den röda LED < br > int G_LED = 9. < br > int LEDpin = 13.
int Reset = 12.
int Sonic_pin = 6; PIN från ultrasonic sensor
/////////////////////////////////////////////////////////////
char val = 0; Tänk om det är byte val... Hur många det lagring
eftersom jag redan läst och lagras den ID och jag tilldelat den till folket
char id_tag1 [] = "78003BDE66FB";
char id_tag2 [] = "78003BF78B3F";
char * nam_tag [] = {"Derek", "Jay"};
char IDstring [13].
int jag = 0;
int p = 0;
////////////////////////////////////////////////////////////
void setup()
{
Serial.BEGIN (9600); börja seriell kommunikation
mySerial.begin(9600);
pinMode (Sonic_pin, indata);
pinMode (R_LED, OUTPUT);
pinMode (G_LED, OUTPUT);
pinMode (Reset, OUTPUT);
pinMode (LEDpin, OUTPUT);
digitalWrite (LEDpin, låg);
}
void loop()
{
beräkna avståndet mätt från ping ultrasonic sensor tills målet är mindre än 4cm bort
float avstånd;
göra {
float tid;
skicka ut en puls ton genom att skapa
pinMode (Sonic_pin, OUTPUT);
digitalWrite (Sonic_pin, låg);
Delay(2);
digitalWrite (Sonic_pin, hög);
Delay(5);
digitalWrite (Sonic_pin, låg);
Låt ultraljud sensorn vara indata att ta tillbaka den ekade våg
pinMode (Sonic_pin, indata);
tid = pulseIn (Sonic_pin, hög); få hela tillvekade i mikrosekund
avståndet = SecToCm(time); anropa funktionen för att beräkna avståndet
Delay(1000);} medan (avstånd > 4.0);
Serial.println ("Hej, vänligen slå ditt ID");
Serial.println("");
Delay(2000);
Open_Door();
Red_tag();
Iden_tag();
resetID();
Serial.println("");
}
////////////////////////////////////////////////////////////////////////////
void Access()
{
tänds den gröna lampan om ID är känd av systemet
digitalWrite (G_LED, hög);
Delay(2000);
digitalWrite (G_LED, låg);
}
///////////////////////////////////////////////////////////////////////////////
void Denied()
{
tänds den röda lysdioden om ID inte är känd av systemet
för (int jag = 0; jag < 3; i ++)
{
digitalWrite (R_LED, hög);
Delay(1000);
digitalWrite (R_LED, låg);
Delay(300);
}
}
//////////////////////////////////////////////////////////////////////////////
float SecToCm(float time)
{
konvertera tiden mäts in avståndet i centimeter
det ultraljuds läsa 29 mikrosekunder per centimeter
återvända time/29.0/2.0;
}
///////////////////////////////////////////////////////////////////////////////////////////////
void Red_tag()
{/ / om det finns en radiofrekvens från låt ID-12 Läs varje röding och lagra värdet
medan (mySerial.available() > 0)
{
för (p = 0; p < 13; p ++)
{
Val = mySerial.read();
IDstring [p] = val;
Serial.println(val);
p ++;
}
}
p = 0;
Delay(500);
Serial.Print ("ID-nummer:");
Delay(500);
skriva ut på den seriella monitorn RFID-unikt ID lagras i sträng
för (jag = 0; jag < 13; i ++)
{
Serial.Print(IDstring[i]);
}
Serial.println();
Delay(1000);
Serial.Print ("var god, vΣnta medan du kontrollerar");
Serial.println();
}
////////////////////////////////////////////////////////////////////////////////
void Iden_tag()
{
booleska läsning = sant; att kontrollera om ID är känd
booleska reading1 = false; / / för att kontrollera om den första ID är okänt
booleska reading2 = false; / / för att kolla om de andra ID är okänt
för (int jag = 0; jag < 12, i ++) / / jämföra den nya knappen Läs i ID 2 lagras i systemet
{
om (IDstring [jag + 1]! = id_tag2[i])
{
reading2 = sant; Ange att ID inte är samma
läsning = false;
bryta;
}
}
om (läser == true)
{
fördröjning (1500);
Serial.println ("tillgång beviljas");
Serial.Print ("ID tillhör");
Serial.println(nam_tag[1]);
Access(); anropa en funktion att lysa upp den gröna lysdioden
Delay(2000);
}
läsning = sant;
för (int jag = 0; jag < 12, i ++) / / Varför 12 inte 13 försöka lista ut
{
om (IDstring [jag + 1]! = id_tag1[i])
{
reading1 = sant;
läsning = false;
bryta;
}
}
{
om (läser == true)
{
fördröjning (1500);
Serial.println ("tillgång beviljas");
Serial.Print ("ID tillhör");
Serial.println(nam_tag[0]);
Access();
Delay(2000);
}
om (reading1 == true & & reading2 == true)
{
Delay(1000);
Denied();
Serial.println ("åtkomst nekad");
Serial.println ("försök igen");
}
}
}
///////////////////////////////////////////////////////////
void resetID()
{
för (int jag = 0; jag < 13; i ++) {
IDstring [i] = 0;
}
} < /p >