Warten auf Taster

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;
   
   
 }

}

RFID_READ_CARD_LESER_AKTUELLER_STAND_8.03.ino (3.85 KB)

Warten ist der falsche weg. Pack die Tasterabfrage ins loop und reagiere mit einer Funktion.

Aber ich muss doch noch im Loop die NFC Karte lesen?
Wie würdest du es dir denn vorstellen?
Danke für die schnelle Antwort :slight_smile:

Der Arduino ist dafür schnell genug. RFID abfragen und in dieser if-Abfrage den Taster abfragen. Wird in dieser Abfrage eine Funktion aufgerufen, haben ja beide Bedingungen gestimmt, RFID erkannt und Taster erkannt.

Könntest du mir das mal umstellen?
Ich verstehe das nicht ganz wie du das meinst.

-rene

renenikolas:
Könntest du mir das mal umstellen?
Ich verstehe das nicht ganz wie du das meinst.

-rene

Du setzt bei Erkennen des RFID eine Statusvariable und fragst diese in der Loop ab, zusammen mit deinen beiden Tastern.
Wenn ein Taster gedrückt wurde, setzt du die Statusvariable wieder zurück.
Durch diese Vorgehensweise wird dein System nicht durch unnötiges Warten blockiert.