Hi Leute,
ich bin hier neu und direkt eine frage Problem.
Ich möchte Tür öffnen von innen und außen mit RFID.
Ich hab schon programm fertig aber einscheint mit fehler weil er liesst immer nur den 1 RFID.
Hat einer IDE ????
Dann solltest Du uns Deinen Sketch zeigen. Setze diesen in Codetags. Wie das geht, steht hier.
Welcher Fehler/Fehlermeldung?
Gruß Tommy
Das ist er:
#include <SPI.h>
#include <MFRC522.h>
#define SS_1_PIN 10
#define RST_1_PIN 9
#define SS_2_PIN 8
#define RST_2_PIN 7
#define LED_G 5
#define LED_R 4
#define RELAY 3
#define ACCESS_DELAY 3000
#define DENIED_DELAY 5000
#define NR_OF_READERS 2
MFRC522 mfrc522(SS_2_PIN, SS_1_PIN);
void setup()
{
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
pinMode(LED_G, OUTPUT);
pinMode(LED_R, OUTPUT);
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY, LOW);
Serial.println("Put your card to the reader...");
Serial.println();
}
void loop()
{
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
Serial.print("UID tag :");
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
if (content.substring(1) == "6E 8A 00 7D" || content.substring(1) == "EE 37 DA 61" || content.substring(1) == "4E 8A 09 7D" || content.substring(1) == "9E 07 00 7D" || content.substring(1) == "4E 09 DC 61" || content.substring(1) == "BE 0E 03 7D")
{
Serial.println("Authorized access");
Serial.println();
delay(200);
digitalWrite(RELAY, HIGH);
digitalWrite(LED_G, HIGH);
delay(ACCESS_DELAY);
digitalWrite(RELAY, LOW);
digitalWrite(LED_G, LOW);
}
else {
Serial.println(" Access denied");
digitalWrite(LED_R, HIGH);
delay(DENIED_DELAY);
digitalWrite(LED_R, LOW);
}
}
Wenn ich es hier änderung mache:
#define NR_OF_READERS 2
MFRC522 mfrc522(SS_2_PIN, SS_1_PIN);
wird der 2 RFID Aktiv.
Und wenn ich das tausche:
#define NR_OF_READERS 2
MFRC522 mfrc522(SS_1_PIN, SS_2_PIN);
dann wird der 1 RFID Aktiv.
a, Keine Fehler, nur werden nicht beide RFID gelessen.
Das sieht komisch aus!
Siehe:
Hi,
Danke erstmal,
Aber da muss ich alles wieder beifügen.
Ein IDE was in meinen Sketch falsch sein konnte????
Sonst funktioniert alles.
Du hast 2 Reader, also brauchst du auch 2 Instanzen der Reader Klasse.
Wie du die beiden Instanzen verwalten möchtest, bleibt dir überlassen. Möglichkeiten gibt es da einige.
Das/Ein Beispiel habe ich dir gezeigt.
ja musst du.
So wie DEIN Sketch aufgebaut ist wird das nichts und es macht auch keinen Sinn hier daran weiterzuarbeiten.
Hier steigt dein Kartenleser aus, wenn nichts da ist und beginnt wieder von vorne:
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
Das Beispiel das dir Combie verlinkt hat ist der bessere Weg.
Das funktioniert und nach diesem Musster sollst du deine Sachen implementieren.
Weiters lies bitte im Forum how to nach wie man Code postet und stell dein Post nachträglich noch richtig. Dazu gibt es die Edit-Funktion.
Nochmal danke, ich hab es jetzt übernomen.
kleine frage wo tu ich meine "Code"(Tag) rein schreiben???
ich kann das nicht finden, oder bin einfach blind
</> im Editor
Drauf Klicken und gucken was passiert
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_1_PIN 10
#define SS_2_PIN 8
#define LED_G 5
#define LED_R 4
#define RELAY 3
#define ACCESS_DELAY 4000
#define DENIED_DELAY 2000
#define NR_OF_READERS 2
byte ssPins[] = {SS_1_PIN, SS_2_PIN};
MFRC522 mfrc522[NR_OF_READERS]; // Create MFRC522 instance.
/**
* Initialize.
*/
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
mfrc522[reader].PCD_Init(ssPins[reader], RST_PIN); // Init each MFRC522 card
Serial.print(F("Reader "));
Serial.print(reader);
Serial.print(F(": "));
mfrc522[reader].PCD_DumpVersionToSerial();
pinMode(LED_G, OUTPUT);
pinMode(LED_R, OUTPUT);
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY, LOW);
}
}
/**
* Main loop.
*/
void loop() {
for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
// Look for new cards
if (mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()) {
Serial.print(F("reader "));
Serial.print(reader);
Serial.print(F("::"));
dump_byte_array(mfrc522[reader].uid.uidByte, mfrc522[reader].uid.size);
Serial.println();
Serial.print(F(": "));
MFRC522::PICC_Type piccType = mfrc522[reader].PICC_GetType(mfrc522[reader].uid.sak);
Serial.println(mfrc522[reader].PICC_GetTypeName(piccType));
Serial.println("Authorized access");
Serial.println();
delay(100);
digitalWrite(RELAY, HIGH);
digitalWrite(LED_G, HIGH);
delay(ACCESS_DELAY);
digitalWrite(RELAY, LOW);
digitalWrite(LED_G, LOW);
Serial.println(" Access denied");
digitalWrite(LED_R, HIGH);
delay(DENIED_DELAY);
digitalWrite(LED_R, LOW);
// Halt PICC
mfrc522[reader].PICC_HaltA();
// Stop encryption on PCD
mfrc522[reader].PCD_StopCrypto1();
} //if (mfrc522[reader].PICC_IsNewC
} //for(uint8_t reader
}
/**
* Helper routine to dump a byte array as hex values to Serial.
*/
void dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}
so???
Genau
ok, aber trotzdem wo muss ich die die Karten/tag einfügen?
weill immoment kann ich es mit jedem teil offnen.
Den Link dazu hatte ich Dir in #2 bereits gegeben. Lesen musst Du selbst.
Gruß Tommy
Hi,
In Meinen ersten Sketch #3 hate ich die Codtags:
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
if (content.substring(1) == "6E 8A 00 7D" || content.substring(1) == "EE 37 DA 61" || content.substring(1) == "4E 8A 09 7D" || content.substring(1) == "9E 07 00 7D" || content.substring(1) == "4E 09 DC 61" || content.substring(1) == "BE 0E 03 7D")
{
Wenn der richige Code gelesen würde ist der RELAY aktiviert.
in meinen 2 Sketch #12 funktioniert alles, das heist egal welche karte gelesen wird, wird auch der RELAY Aktiviert.
Ich brauche hilfe.
wo muss ich die Code beifugen in dem neuen Sketch so das nur die Aktiv werden.
Oder muss ich denn anders schreiben.
hi, einscheint hat hier auch keine tipps oder ideen.
Du musst deine Abfrage der IDs aufteilen und nicht alle in einer Oder-Verknüpfung abfragen.
Tipps und Ideen gabs schon reichlich. Aber etwas selber probieren sollst schon auch.
probier mal mit einem Tag ob das nun passt oder falsch ausgibt.
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_1_PIN 10
#define SS_2_PIN 8
#define LED_G 5
#define LED_R 4
#define RELAY 3
#define ACCESS_DELAY 4000
#define DENIED_DELAY 2000
#define NR_OF_READERS 2
byte ssPins[] = {SS_1_PIN, SS_2_PIN};
MFRC522 mfrc522[NR_OF_READERS]; // Create MFRC522 instance.
// a array of valid tags
const byte validTag[][4] {
{0x6E, 0x8A, 0x00, 0x7D}
};
/**
Initialize.
*/
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
mfrc522[reader].PCD_Init(ssPins[reader], RST_PIN); // Init each MFRC522 card
Serial.print(F("Reader "));
Serial.print(reader);
Serial.print(F(": "));
mfrc522[reader].PCD_DumpVersionToSerial();
}
pinMode(LED_G, OUTPUT);
pinMode(LED_R, OUTPUT);
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY, LOW);
}
/**
Main loop.
*/
void loop() {
for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
// Look for new cards
if (mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()) {
Serial.print(F("reader "));
Serial.print(reader);
Serial.print(F("::"));
dump_byte_array(mfrc522[reader].uid.uidByte, mfrc522[reader].uid.size);
Serial.println();
Serial.print(F(": "));
MFRC522::PICC_Type piccType = mfrc522[reader].PICC_GetType(mfrc522[reader].uid.sak);
Serial.println(mfrc522[reader].PICC_GetTypeName(piccType));
checkTag(mfrc522[reader].uid.uidByte, mfrc522[reader].uid.size);
// Halt PICC
mfrc522[reader].PICC_HaltA();
// Stop encryption on PCD
mfrc522[reader].PCD_StopCrypto1();
} //if (mfrc522[reader].PICC_IsNewC
} //for(uint8_t reader
}
/**
Helper routine to dump a byte array as hex values to Serial.
*/
void dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}
void checkTag(byte *buffer, byte bufferSize) {
(void)bufferSize;
if (memcmp(buffer, validTag[0],4)==0)
{
Serial.println(F("passt"));
}
else
{
Serial.println(F("falsch"));
}
}
void spaeterMal()
{
Serial.println("Authorized access");
Serial.println();
delay(100);
digitalWrite(RELAY, HIGH);
digitalWrite(LED_G, HIGH);
delay(ACCESS_DELAY);
digitalWrite(RELAY, LOW);
digitalWrite(LED_G, LOW);
Serial.println(" Access denied");
digitalWrite(LED_R, HIGH);
delay(DENIED_DELAY);
digitalWrite(LED_R, LOW);
}