MFRC522 и светодиод.
- Войдите на сайт для отправки комментариев
Вс, 29/04/2018 - 20:13
Всем привет!
Прежде чем написать, воспользовался поиском по форуму и нечего вразумительного не нашел пл решению своей задачи...
Не могу понять, как написать логику работы следующую:
Если карточка приложена к считывателю, то светодиод не горит, если отсутствует, то горит.
Вроде элементарно, но му в итоге получаем мигающий светодиод, если карта приложена.
Вот базовый код:
#include <SPI.h> #include <MFRC522.h> const int RST_PIN = 0; // пин RST const int SS_PIN = 15; // пин SDA (SS) int bluePin = D4; // D-это GPIO4 (D2) MFRC522 mfrc522(SS_PIN, RST_PIN); // создаём объект MFRC522 void setup() { Serial.begin(115200); // инициализация послед. порта SPI.begin(); // инициализация шины SPI mfrc522.PCD_Init(); // инициализация считывателя RC522 pinMode(bluePin, OUTPUT); } void loop() { delay(100); // Ожидание прикладывания новой RFID-метки: if ( ! mfrc522.PICC_IsNewCardPresent()) { Serial.println("NoCard"); digitalWrite(bluePin, LOW); return; // выход, если не приложена новая карта } // Считываем серийный номер: if ( ! mfrc522.PICC_ReadCardSerial()) { return; // выход, если невозможно считать сер. номер } Serial.println("YesCard"); digitalWrite(bluePin, HIGH); }
А что в сериал выводит?
При поднесенной карточке:
:) пасибки, поржал.. там жеж return натыкан везде где надо и не очень ..
ТС-у:
1. YesCard: строка 31 или 32: пропущено else{, строка 35: соответственно отсутствует }
2. NoCard выводится при приложенной карточке (срабатывает условие), потому что приложенная карточка УЖЕ не является "новой", она "таже самая"..
Ну .. это мне мой ХШ кажет .. врет может быть. ;)
Немного переработал код для читабельности:
При приложенной карте вообще бред получился в консоле...
Почему Вы считаете что это "бред"? Вижу что как написали - так оно и работает, согласно вашего плану, пардон "программе":
Обнаружена новая карта, успешное чтение карты, карта торчит старая, неудачное ПОВТОРНОЕ чтение с карты.
Последнее действие видимо сбрасывает признак чтения с карты и "цикл" повторяется заново, потому что карта после сброса превратилась снова в "новую". Все согласно программе.
Что Вам надо? Мне кажется что Вам поможет блокировка повторного опроса номера карты, если она "не новая" а таже самая.. но, в таком разе Вам потребуется как-то развести ситуапции "нет карты вовсе" и "не новая карта". Шукайте, смотрите как устроена эта библиотека, есть там что-то в этом направлении или нет. Скорее всего Вы не верно понимаете логику работы этой библиотеки. Сам с ней не работал, и желания лазить в её потроха - увы нет.
Вообщем рабочий код получился такой