RFID светильник на rc522

Тема в разделе "Arduino & Shields", создана пользователем redven, 23 ноя 2018.

Метки:
  1. redven

    redven Нерд

    Добрый день. Хочу сделать светильник, работающий только в момент наличия карты над считывателем.
    Не могу сообразить как)) При таком условии свет будет мигать. Подскажите пожалуйста.

    Код (C++):
    #include <SPI.h>
    #include <MFRC522.h> // библиотека "RFID".
    #define SS_PIN 10
    #define RST_PIN 9
    MFRC522 mfrc522(SS_PIN, RST_PIN);
    unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате

    void setup() {
      Serial.begin(9600);
      Serial.println("Waiting for card...");
      SPI.begin();  //  инициализация SPI / Init SPI bus.
      mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
      pinMode(4, 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 == 560006054) // Сравниваем Uid метки, если он равен заданому то серва открывает.
      {
      digitalWrite(4, HIGH);   // turn the LED on (HIGH is the voltage level)
      delay(4000);                       // wait for a second
      digitalWrite(4, LOW);    // turn the LED off by making the voltage LOW
      delay(4000);                
      }
    }
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Ну так убери blink из кода-три последние строчки нах.
     
  3. redven

    redven Нерд

    Функция else не помогает вернуть значение Low.
    Просто убрав три строчки мы только включим навечно светильник)
     
  4. Limoney

    Limoney Гик

    Код (C++):

    if (uidDec == 560006054) // Сравниваем Uid метки, если он равен
    {
      digitalWrite(4, HIGH);   // turn the LED on (HIGH is the voltage level)  
    }
    else
    {
       digitalWrite(4, LOW);    // turn the LED off by making the voltage LOW
    }
    uidDec = 0;
     
     
    redven нравится это.
  5. redven

    redven Нерд

    тоже думал что сработает (правда без
    Код (C++):
    uidDec = 0;
    ) но не работает) тестирую в прямом эфире)))
     
  6. Limoney

    Limoney Гик

    если uidDec == 560006054, работать должно, светодиод включается?
     
  7. redven

    redven Нерд

    Включается и включался) А вот сделать так, что бы при исчезновении фид метки реле отключалось - не выходит((
     
  8. Airbus

    Airbus Радиохулиган Модератор

    А номер карты принципиально или просто наличие любой RFID?
     
  9. redven

    redven Нерд

    Подскажите идею полностью)) кажется может сработать)
     
  10. b707

    b707 Гуру

    Все должно работать, как Limoney посоветовал.
    Видимо вы тот код. что он дал - не осилили в свой скетч вставить.
    Полный код того что у вас получилось выкладывайте.
     
    Limoney нравится это.
  11. b707

    b707 Гуру

    а. хотя нет - не прав. Кода Limoney для правильной работы мало.
    еще 2 строчки надо добавить
    Код (C++):
    #include <SPI.h>
    #include <MFRC522.h> // библиотека "RFID".
    #define SS_PIN 10
    #define RST_PIN 9
    MFRC522 mfrc522(SS_PIN, RST_PIN);
    unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате

    void setup() {
      Serial.begin(9600);
      Serial.println("Waiting for card...");
      SPI.begin();  //  инициализация SPI / Init SPI bus.
      mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
      pinMode(4, OUTPUT);
    }
    void loop() {
      // Поиск новой метки
      if ( ! mfrc522.PICC_IsNewCardPresent()) {
       digitalWrite(4, LOW);  
       return;
      }
      // Выбор метки
      if ( ! mfrc522.PICC_ReadCardSerial()) {
       digitalWrite(4, LOW);  
       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 == 560006054) // Сравниваем Uid метки, если он равен заданому то серва открывает.
      {
      digitalWrite(4, HIGH);  
      }
    else  digitalWrite(4, LOW);  
    }
     
  12. redven

    redven Нерд

    Понимаю ироничный тон и даже поддерживаю.

    Код (C++):
    #include <SPI.h>
    #include <MFRC522.h> // библиотека "RFID".
    #define SS_PIN 10
    #define RST_PIN 9
    MFRC522 mfrc522(SS_PIN, RST_PIN);
    unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате

    void setup() {
      Serial.begin(9600);
      Serial.println("Waiting for card...");
      SPI.begin();  //  инициализация SPI / Init SPI bus.
      mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
      pinMode(4, OUTPUT);
    }
    void loop() {
      // Поиск новой метки
      if ( ! mfrc522.PICC_IsNewCardPresent()) {
        return;
      }
      // Выбор метки
      if ( ! mfrc522.PICC_ReadCardSerial()) {
        return;
      }
      // Выдача серийного номера метки.
      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 == 560006054) // Сравниваем Uid метки, если он равен
    {
      digitalWrite(4, HIGH);   // turn the LED on (HIGH is the voltage level)
    }
    else
    {
       digitalWrite(4, LOW);    // turn the LED off by making the voltage LOW
    }
    uidDec = 0;
    }
    Код вставить осилил. Реле упорно не хочет выключаться(
     
  13. Limoney

    Limoney Гик

    какие?
     
  14. redven

    redven Нерд

    а теперь реле мелодично поехало по столу (из-за дребезга с которым она задергалась)
     
  15. b707

    b707 Гуру

    я там выше выложил - нужно выключать лампочку не только при неправильном UID, но и если карточки нет или с нее Сериал не считан
     
  16. b707

    b707 Гуру

    это с моим кодом из сообщения #11 ?
    если да - видимо карточка не успевает считываться. Значит надо хитрую задержку добавить...

    но я сейчас из сети должен слинять...
     
  17. redven

    redven Нерд

    к сожалению - да. Пытался убрать дополнительные выключения - проблему не решило. Может через счетчик событий или еще как..
     
  18. b707

    b707 Гуру

    видимо карточка не успевает считываться. Значит надо хитрую задержку добавить...

    сорри, убегаю
     
    redven нравится это.
  19. Airbus

    Airbus Радиохулиган Модератор

    Если есть карта включить если нет выключить.И все.У меня есть рабочий код как до дома доеду выложу.Если подождете час.
     
  20. redven

    redven Нерд

    спасибо! Буду пробовать и ждать))