Hallo,
ich habe eine frage zu meinem Arduino NFC Projekt.
Zuerst vergleiche ich die ID des chips mit der gespeicherten, wenn diese gespeichert ist, soll gewartet werden bis einer der zwei Taster gedrückt wird. Danach soll sich jenachdem welcher Taster gedrückt wurde, verschieden sachen passerieren die ich dann dazu programmiere. Bei dem if(card_accepted), soll das programm warten bis einer der Schalter gedrückt wurde. ich habe das ganze erst durch eine while schleife "gelöst" aber das geht dann nur, wenn der Schalter schon gedrückt ist wenn man die karte dranhält
Mit freundlichen Grüßen
rene
/*
* Typical pin layout used:
* -----------------------------------------------------------------------------------------
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro
* Signal Pin Pin Pin Pin Pin Pin
* -----------------------------------------------------------------------------------------
* RST/Reset RST 9 5 D9 RESET/ICSP-5 RST
* SPI SS SDA(SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
*/
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 5 // SPI Reset Pin
#define SS_PIN 53 // SPI Slave Select Pin
MFRC522 mfrc522(SS_PIN, RST_PIN); // Instanz des MFRC522 erzeugen
byte blue_uid[] = {0x15, 0x76, 0x81, 0x1D};
byte red_uid[] = {0xDB, 0x40, 0xDE, 0x0D};
int blue_check_ausgabe = false;
int buttonPin_1 = 26;
int buttonPin_2 = 27;
int buttonState_1 = 0;
int buttonState_2 = 0;
int card_accepted = false;
void setup() {
// Diese Funktion wird einmalig beim Start ausgeführt
Serial.begin(9600); // Serielle Kommunikation mit dem PC initialisieren
SPI.begin(); // Initialisiere SPI Kommunikation
mfrc522.PCD_Init(); // Initialisiere MFRC522 Lesemodul
pinMode(blue_led, OUTPUT);
pinMode(red_led, OUTPUT);
pinMode(buttonPin_1, INPUT);
pinMode(buttonPin_2, INPUT);
}
void loop() {
buttonState_1 = digitalRead(buttonPin_1);
buttonState_2 = digitalRead(buttonPin_2);
// Nur wenn eine Karte gefunden wird und gelesen werden konnte, wird der Inhalt von IF ausgeführt
// PICC = proximity integrated circuit card = kontaktlose Chipkarte
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial() ) {
Serial.print("Gelesene UID:");
for (byte i = 0; i < mfrc522.uid.size; i++) {
// Abstand zwischen HEX-Zahlen und führende Null bei Byte < 16
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
}
Serial.println();
// UID Vergleichen mit blue_uid
for (int j=0; j<4; j++) {
if (mfrc522.uid.uidByte[j] != blue_uid[j]) {
}else{
card_accepted = true;
}
}
Serial.println();
// UID Vergleichen mit red_uid
for (int j=0; j<4; j++) {
if (mfrc522.uid.uidByte[j] != red_uid[j]) {
}else{
card_accepted = true;
}
}
if(card_accepted){
//Hier wird soll dann abgefragt werden welche der zwei schalter gedrückt wird.
//solange bist das passiert soll das sytem pausiertern
//
//
//
//
//
//
Serial.println("access granted");
while((buttonState_2 == digitalRead(buttonPin_2))&&(buttonState_2 == digitalRead(buttonPin_2))) {
if(buttonState_1){
Serial.println("1");
}
if(buttonState_2){
Serial.println("2");
}
}
}else{
Serial.println("Acsess denied");
}
// Versetzt die gelesene Karte in einen Ruhemodus, um nach anderen Karten suchen zu können.
mfrc522.PICC_HaltA();
delay(1000);
digitalWrite(blue_led, LOW);
digitalWrite(red_led, LOW);
card_accepted = false;
}
}