Мой код очень прост, но я не знаю, как выполнить простую задачу.
Каждый раз, когда читается RFID-карта, я хочу, чтобы она однажды инициировала событие.Это работает нормально в отдельности.
Однако я также хочу, чтобы каждый раз происходило другое одноразовое событие при каждом извлечении карты.Этот бит, кажется, все испортил.
Я использую библиотеку MFRC522.
Может кто-нибудь сказать мне метод, чтобы сделать оба в одном и том же коде?Я немного зеленоват во всем этом.
Большое спасибо заранее :) Мой код здесь:
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
bool executed = false;
void setup() {
Serial.begin(9600); // Initiate a serial communication
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
}
void loop() {
if ( mfrc522.PICC_IsNewCardPresent()) {
if ( mfrc522.PICC_ReadCardSerial()) {
Serial.println("Great!.. each time a card is read and re-read this text will print *ONCE ONLY*");
}
}
// BELOW I WANT TO EXECUTE A COMMAND *ONCE ONLY* EACH TIME A CARD IS TAKEN AWAY
// WHEN UNCOMMENTED, THE "Oh dear.." PRINTS CONTINUOUSLY
// if ( !mfrc522.PICC_IsNewCardPresent()) {
// Serial.println("Oh dear... this seems to keep printing... ");
// }
mfrc522.PICC_HaltA(); // Halt PICC
mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD
}
Кроме того, исправленный код, который я также попробовал, выглядит следующим образом.Это тоже не сработало.На ней была напечатана настоящая карта, но когда ее забрали, несколько отпечатков непрерывно происходили:
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
bool executed = false;
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522
Serial.println("Waiting for RFID-chip...");
}
void loop() {
if ( mfrc522.PICC_IsNewCardPresent()) {
if ( mfrc522.PICC_ReadCardSerial()) {
Serial.println("Great!.. each time a card is read and re-read this text will print *ONCE ONLY*");
executed = true;
}
}
else {
if (executed) {
Serial.println("Oh dear... this seems to keep printing... ");
executed = false;
}
}
}