RFID не получается сделать включение и выключение. Очень нужна помощь, сил уже нет.
- Войдите на сайт для отправки комментариев
Сб, 07/10/2017 - 21:46
Приветствую!!!
Нужно, что бы с RFID метки включалась сигнализация и выключалась при повторном подношении. В интернете куча того, что включается и через паузу отключается, но мне нужно именно по карточке и включение и отключение. С инфракрасным датчиком работает все, с ДУ тоже с одной кнопки всё работает, а вот с RFID не в какую. При подношении он снимает снимает с охраны, а через 2 секунды снова ставит. Но карточку я второй раз не подношу. Целый день убил, ничего не понимаю. Подскажите, пожалуйста, только по существу, где я облажался, сил больше нет.
#include <SPI.h> #include <MFRC522.h> // библиотека "RFID". #define SS_PIN 10 #define RST_PIN 9 #define STATE_LED 7 MFRC522 mfrc522(SS_PIN, RST_PIN); unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате int State=1; void setup() { Serial.begin(9600); Serial.println("Waiting for card..."); SPI.begin(); // инициализация SPI / Init SPI bus. mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card. pinMode(STATE_LED, OUTPUT); } void loop() { // Поиск новой метки if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Выбор метки if ( ! mfrc522.PICC_ReadCardSerial()) { return; } uidDec = 0; // Выдача серийного номера метки. for (byte i = 0; i < mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte[i]; uidDec = uidDec * 256 + uidDecTemp; } Serial.println("Card UID: "); Serial.println(uidDec); // Выводим UID метки в консоль. /////////////////////////////////////////////////////////////////////////////////////////////////////// if (uidDec == 3309163877 && State==1){ Serial.println("Security state: Off"); tone(2, 700, 500); // Делаем звуковой сигнал, Открытие State = 0; delay(2000); // пауза 3 сек и механизм запирается. } if (uidDec == 3309163877 && State==0){ State=1; Serial.println("Security state: On"); tone(2, 700, 1000); // Делаем звуковой сигнал, Открытие delay(2000); // пауза 2 сек и механизм запирается. } }
После delay в строке 51 поставьте uidDec = 0;
Для порядка тоже самое в строке 58, хотя должно работать и так.
Да, уже поставил, работает, большое спасибо.)
else if в строке 54, при обнулении UID нет смысла во флагах State