Hallo,
ich habe mir vor ein paar Tagen einen Arduino und ein
RFID-Readermodul gekauft, um damit eine Tür zu öffnen/schließen.
Mit SoftwareSerial bekomme ich die Verbindung zwischen Arduino und Reader hin, wenn das richtige Tag vor den Reader gehalten wird, dann schreibt der Arduino den Port 13 2 Sekunden lang auf HIGH, dann wieder LOW.
hier mal der code:
#include <SoftwareSerial.h>
//Kommunikation mit der RFID-Platine
SoftwareSerial rfid = SoftwareSerial(2,6);
//Output zur Türschaltung
byte doorLock = 13;
void setup()
{
//Pins
pinMode(doorLock, OUTPUT);
//Serials
//Serial.begin(9600);
//Serial.println("Serial ready");
rfid.begin(9600);
//Serial.println("RFID ready");
}
//Tags mit Zugangsberechtigung
String tags[] = {"50008F1234D8","5100ABCDEF29","5100FEE1234A"};
int numberOfTags = 3;
//Zu prüfender Tag
String applicant;
void loop()
{
applicant = getTag();
//
if (applicant.length() == 12)
{
//Serial.println(applicant);
if (checkTag(applicant) == true)
{
digitalWrite(doorLock, HIGH);
//Serial.println("Access granted");
delay(2000);
digitalWrite(doorLock, LOW);
}
else { /*Serial.println("Access denied")*/;}
}
applicant = "";
}
//Tag-ID auslesen, falls möglich
String getTag()
{
char c;
String tag;
while(rfid.available()>0)
{
c=rfid.read();
tag += c;
}
tag = tag.substring(1,13);
delay(30);
return(tag);
}
//Hat der Tag Zugangsberechtigung?
boolean checkTag(String applicant)
{
for(int i = 0; i < numberOfTags; i++)
{
if (applicant == tags[i])
return (true);
}
return (false);
}
Das ganze hat folgenden Haken: in der Methode getTag() (ziemlich am Ende) musste ich eine verzögerung von 30ms einbauen, sonst klappt es irgendwie nicht (der reader scheint das tag nicht schnell genug lesen zu können... oder liegts vielleicht an der seriellen Verbindung??). Das führt dazu, dass die Tür (hängt über nen transistor an pin 13) 2 sekunden aufgeht, dann 30ms zu ist usw., was natürlich stört.
Weiß jemand, wie ich diese delay da rauskriegen könnte?
Vielen Dank schon mal für alle Antworten
