Arduino+RFID+кнопка
- Войдите на сайт для отправки комментариев
Пт, 18/12/2015 - 22:08
Доброго всем госпада.Такое дело имеем : Кнопку и RFID- считыватель. Так вот Можно ли сделать так, что бы метки сканировались не постоянно, и RFID включался только по нажатию на кнопку?
Код приблезительно такой "Стандартный"
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
void setup() {
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
Serial.println("Scan PICC to see UID and type...");
}
void loop() {
byte uidCard[4] = {0x93, 0x48, 0x67, 0x9A};
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
for (byte i = 0; i < 4; i++) {
if (uidCard[i] != mfrc522.uid.uidByte[i])
return;
}
Serial.println("OPEN");
// digitalWrite();
delay(5000);
// digitalWrite();
}
Именно включался, или просто считывание проходило после нажания кнопки?
Что бы считывание проходило, только после нажатия на кнопку
#include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 9 #define BUTTON_PIN 3 // кнопка между пином и GND через R=1k (это не подтяжка, а защита пина). #define TIMEOUT 30 // период активности RFID после нажатия кнопки, сек #define BUTTON_PRESSED (!digitalRead(BUTTON_PIN)) // макрос для удобства чтения кода boolean buttonFlag = false; byte uidCard[4] = { 0x93, 0x48, 0x67, 0x9A }; MFRC522 mfrc522(SS_PIN, RST_PIN); void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); // активируем внутреннюю подтяжку pinMode(LED_BUILTIN, OUTPUT); // активируем впаянный светодиод Serial.begin(9600); SPI.begin(); mfrc522.PCD_Init(); Serial.println("Please press a button."); } void loop() { if(BUTTON_PRESSED) // кнопка нажата { Serial.println("Scan PICC to see UID."); unsigned long prevButtonPressed = millis(); while(millis() - prevButtonPressed < TIMEOUT * 1000L) // окно N сек, когда активен ридер { if (mfrc522.PICC_IsNewCardPresent()) // карта появилась в зоне ридера { Serial.println("Card found"); //return; // возврат в loop // Select one of the cards if (mfrc522.PICC_ReadCardSerial()) // номер карты прочтен { Serial.println("Card number is readed"); //return; // возврат в loop byte validCard = 0; for (byte i = 0; i < 4; i++) // проверка номера карты { if (uidCard[i] == mfrc522.uid.uidByte[i]) validCard++; // совпадение ячеек } if (validCard == 3) // номер карты подтвержден { Serial.println("OPEN"); // digitalWrite(); delay(5000); // digitalWrite(); } else // номер карты не совпадает с эталоном { Serial.println("Bye-bye!"); return; // возврат в loop } } } digitalWrite(LED_BUILTIN, millis()%2); // моргаем светиком, пока активен ридер delay(100); } Serial.println("Timeout! Press a button again."); digitalWrite(LED_BUILTIN, LOW); } }считыватель активен 30 сек после нажатия на кнопку.
Спасибо большое за помощь, Всех с Наступающим.