Hallo habe mich ein paar Tage mit Arduino beschäftigt und versucht einen Arduino UNO mit RC522 (NFC) auszurüsten.
nach einigem Hin und her habe ich es hinbekommen das je nach dem welche ID vorliegt das jeweilige Relay geschalten wird oder einen Schaltung abgewiesen wird
Ähnlich wie die Zugangskontrolle vom GitHub nur mit 2 Relay.
nun möchte ich aber nicht mehr per UID der NFC Tags unterscheiden sonder mit einem Code den ich mit einem 2ten Arduino vorher auf den NFC Tag schreibe
also z.b Code1 = Relay 1 Code 2 = Relay 2
so das er dann im ersten Arduino beschriftet wird Taste 1 = Code 1 Taste 2 = Code 2
und im 2ten Arduino erkannt wird Code 1 = Relay 1 Code 2 = Relay 2
der momentante Sketch sieht bislang nur eine Schaltung je nach UID für das jeweilige Relay vor
Sketch:
//////////////////////////////////////////////////
//
// RFID/NFC Erkennung / Sharkfire
//
//////////////////////////////////////////////////
#include <SPI.h> // Import SPI-Bibiothek
#include <MFRC522.h> // Import RFID-Bibiothek
///////// Variablen MFRC522 //////////////////////
const int SDAPIN = 10; // Uno => Pin 10
const int RSTPIN = 9; // Uno => Pin 9
MFRC522 rfidReader(SDAPIN, RSTPIN); // RFID-Empfänger
///////// Aktoren: 2er Relai Karte ///////////////////
const int K1 = 5; // Uno -> Pin 8
const int K2 = 6; // Uno -> Pin 7
//////// ID des richtigen RFID-Tags //////////////
byte sesam[] = {0x22, 0x7E, 0x83, 0xCB};
byte sesam1[] = {0x22, 0x90, 0xE5, 0x10};
byte sesam2[] = {0x04, 0x84, 0x2F, 0xF2};
byte sesam3[] = {0x04, 0xC5, 0x2F, 0xF2};
byte sesam4[] = {0x04, 0xE8, 0x2F, 0xF2};
byte sesam5[] = {0x04, 0x29, 0x2F, 0xF2};
byte sesam6[] = {0x04, 0x4B, 0x2F, 0xF2};
byte sesam7[] = {0x04, 0xC5, 0x2F, 0xF2};
//////////////////////////////////////////////////
//
// setup()
// Initialisieren von SPI,
// seriellem Monitor,
// 20x4 LCD
// RFID-Leser
//
//////////////////////////////////////////////////
void setup()
{
pinMode(K1, OUTPUT);
pinMode(K2, OUTPUT);
Serial.begin(9600); // Serielle Verbindung
SPI.begin(); // SPI-Verbindung aufbauen
rfidReader.PCD_Init(); // Initial. RFID-Leser
Serial.println("Material-Kontrolle aktiv");
digitalWrite(K1, HIGH);
digitalWrite(K2, HIGH);
}
//////////////////////////////////////////////////
//
// acceptedRFID()
// Stimmt gelesene RFID
// mit der voreingestellten ID überein?
//
//////////////////////////////////////////////////
bool acceptedRFID(byte uid[4]) {
return
(rfidReader.uid.uidByte[0] == sesam[0]) &&
(rfidReader.uid.uidByte[1] == sesam[1]) &&
(rfidReader.uid.uidByte[2] == sesam[2]) &&
(rfidReader.uid.uidByte[3] == sesam[3]) or
(rfidReader.uid.uidByte[0] == sesam1[0]) &&
(rfidReader.uid.uidByte[1] == sesam1[1]) &&
(rfidReader.uid.uidByte[2] == sesam1[2]) &&
(rfidReader.uid.uidByte[3] == sesam1[3]) or
(rfidReader.uid.uidByte[0] == sesam2[0]) &&
(rfidReader.uid.uidByte[1] == sesam2[1]) &&
(rfidReader.uid.uidByte[2] == sesam2[2]) &&
(rfidReader.uid.uidByte[3] == sesam2[3]) or
(rfidReader.uid.uidByte[0] == sesam4[0]) &&
(rfidReader.uid.uidByte[1] == sesam4[1]) &&
(rfidReader.uid.uidByte[2] == sesam4[2]) &&
(rfidReader.uid.uidByte[3] == sesam4[3]) or
(rfidReader.uid.uidByte[0] == sesam5[0]) &&
(rfidReader.uid.uidByte[1] == sesam5[1]) &&
(rfidReader.uid.uidByte[2] == sesam5[2]) &&
(rfidReader.uid.uidByte[3] == sesam5[3]);
}
bool acceptedRFID2(byte uid[4]) {
return
(rfidReader.uid.uidByte[0] == sesam3[0]) &&
(rfidReader.uid.uidByte[1] == sesam3[1]) &&
(rfidReader.uid.uidByte[2] == sesam3[2]) &&
(rfidReader.uid.uidByte[3] == sesam3[3]) or
(rfidReader.uid.uidByte[0] == sesam6[0]) &&
(rfidReader.uid.uidByte[1] == sesam6[1]) &&
(rfidReader.uid.uidByte[2] == sesam6[2]) &&
(rfidReader.uid.uidByte[3] == sesam6[3]) or
(rfidReader.uid.uidByte[0] == sesam7[0]) &&
(rfidReader.uid.uidByte[1] == sesam7[1]) &&
(rfidReader.uid.uidByte[2] == sesam7[2]) &&
(rfidReader.uid.uidByte[3] == sesam7[3]);
}
//////////////////////////////////////////////////
//
//
// Kunststoff erkannt
//
//
//////////////////////////////////////////////////
void signalAccessGranted() {
digitalWrite(K1, LOW);
digitalWrite(K2, HIGH);
delay(2000);
digitalWrite(K1, HIGH);
digitalWrite(K2, HIGH);
}
//////////////////////////////////////////////////
//
//
// Holz
//
//
//////////////////////////////////////////////////
void signalAccessGranted2() {
digitalWrite(K1, HIGH);
digitalWrite(K2, LOW);
delay(2000);
digitalWrite(K1, HIGH);
digitalWrite(K2, HIGH);
}
//////////////////////////////////////////////////
//
// loop()
// Warten auf RFID-Erkennung
// Reaktion abhaengig vom ID-Vergleich
//
//////////////////////////////////////////////////
void loop()
{
//
// Karte erkannt und gelesen
if (rfidReader.PICC_IsNewCardPresent() && rfidReader.PICC_ReadCardSerial()) {
Serial.print("RFID-TAG => ");
// Bytes der ID lesen und ausgeben
Serial.print("/");
for (byte i = 0; i < rfidReader.uid.size; i++) {
Serial.print(rfidReader.uid.uidByte[i], HEX);
Serial.print("/");
}
Serial.println();
// Check ob Karte mit Variable sesam übereinstimmt
if (acceptedRFID(rfidReader.uid.uidByte)) { // ja =>
//
signalAccessGranted();
Serial.println("Weisses-Rohteil erkannt");
delay(1000);
}
else
if (acceptedRFID2(rfidReader.uid.uidByte)) { // ja =>
signalAccessGranted2();
Serial.println("Schwarzes-Rohteil erkannt");
delay(1000);
}
else // nein =>
{
delay (1000);
Serial.println("kein Rohteil erkannt");
delay(1000);
}
}
}
Vielleicht jemand eine Idee? Dachte das ich ggf. mit der Personal Daten Read/Write vom GitHub was anfangen oder zusammen schneiden könnte. 8)