включение выключение по датчику mfrc522

Тема в разделе "Arduino & Shields", создана пользователем mf2, 9 дек 2017.

  1. mf2

    mf2 Нерд

    Доброго времени суток. Имеется считыватель RFID RC522 и несколько карт для него, необходимо включить\выключить некоторое количество устройств по списку разрешенных карт.

    Как сделать: при первом прикладывании устройства отключаются, при повторном включаются.?
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    static boolean flag = false; // заводим переменную, имеющую только два состояния
    if(приложили карту) flag = !flag; // карта меняет состояние переменной на противоположное
    if(flag == true) { открываем замок }; // действие по состоянию переменной
    else { закрываем замок };
     
    arkadyf нравится это.
  3. mf2

    mf2 Нерд

    я далпайоп. что я делаю не так?

    Код (C++):

    #include <SPI.h> //вроде нужна для mfrc522
    #include <MFRC522.h> // библиотека "RFID".
    #define SS_PIN 10 //пин ss ридера
    #define RST_PIN 9 //пин rst ридера
    int RelayDev = 3;//d3
    int GerkonDev = 2; //d2
    int Arm;
    static boolean flag = false;;//глобальный статус устройства, по умолчанию включено
    int RedLed = 4;//красный светодиод на d4
    int GreenLed = 5;//зеленый светодиод на d5
    MFRC522 mfrc522(SS_PIN, RST_PIN); //объявляем ридер
    unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате
    void setup()
    {
    pinMode(RelayDev, OUTPUT);//реле как выход
    pinMode(GerkonDev, INPUT);//геркон вход
    pinMode(GreenLed, OUTPUT); //индикация питания
    pinMode(RedLed, OUTPUT); //индикация при боевом режиме
    SPI.begin();  //  инициализация SPI / Init SPI bus.
    mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
    digitalWrite(GreenLed, HIGH);//светильник включен, питание есть работает всегда
    Arm = digitalRead(GerkonDev);//забираем статус геркона
    }

    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;
      }
      if (uidDec == 1973922155 || 299185877) {
        digitalWrite(RelayDev, LOW);
        digitalWrite(RedLed, HIGH);
        }
     if((uidDec == 1973922155L) || (uidDec == 299185877L)) flag = !flag; // карта меняет состояние переменной на противоположное
    if(flag == true) {
    digitalWrite(RedLed, HIGH);
    if (Arm == LOW) {
      digitalWrite(RelayDev, HIGH);// действие по состоянию переменной
    }else {
    if (Arm == LOW)
      {
      digitalWrite(RelayDev, LOW);
      }
    }}


     
     
  4. DetSimen

    DetSimen Guest

    Я тебе в другом форуме писал, что ТАК:
    НЕ делают. И написал КАК делают. И что?

    Разбей задачу на маленькие блоки сначала.
    Научись включать/выключать реле.
    Научись считывать ключ с метки
    Научись отличать правильную метку от неправильной
    Распиши алгоритм
    Соедини всё вместе.
    Получи аргазм от собственной крутости.

    И язык С изучай попутно. Вдумчиво и на практике.
     
  5. DetSimen

    DetSimen Guest

    Иначе так на этом
    уровне и останешься.
     
  6. mf2

    mf2 Нерд

    Выбор условия «или» срабатывает для обеих карт. Проверено для реле на выход, условие присутствие карт на считывателе.
     
  7. mf2

    mf2 Нерд

    Си в технаре учил достаточно давно.
    Дык и так блочное описание использую на основе существующих решений и примеров
    Когда что-то не понимаю сначала Гугл/тематические форумы, а вот только потом задаю дибильные вопросы.
     
  8. DetSimen

    DetSimen Guest

    В том виде, как у тебя написано, условие будет срабатывать на ЛЮБУЮ карту. Подумай, почему.
     
    b707 нравится это.
  9. mf2

    mf2 Нерд

    Нет, ключ от домофона считывается, но не запускает устройство
     
  10. DetSimen

    DetSimen Guest

    ОК. Вопросов больше не имею.
     
  11. mf2

    mf2 Нерд

    flag не меняет статуса и соответственно не робит
     
  12. mf2

    mf2 Нерд

    сыроватый, но готовый к работе=)
    одноканальный контроллер системы охранной сигнализации с rfid

    Код (C++):
    #include <SPI.h> //нужно для MFRC522.h
    #include <MFRC522.h> // библиотека "RFID".
    #define STATE_LED 5
    MFRC522 mfrc522(10, 9); //объявляем считыватель
    unsigned long uidDec, uidDecTemp;  //номера метки(10)
    int State=1;
    int GreenLed = 5;//d5
    int RedLed = 4;//d4
    int RelayDev = 3;//d3
    int GerkonDev = 2; //d2


    void setup() {
      Serial.begin(9600);
      Serial.println("Waiting for card...");
      SPI.begin();  //  инициализация SPI / Init SPI bus.
      mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
       pinMode(RelayDev, OUTPUT);//выход
      pinMode(GerkonDev, INPUT);//вход
      pinMode(GreenLed, OUTPUT); //индикация питания
      pinMode(RedLed, OUTPUT); //индикация
    //  digitalWrite(GreenLed,HIGH);
    // Arm = digitalRead(GerkonDev);//забираем статус геркона
    pinMode(STATE_LED, OUTPUT);


    }
    void loop() {
      if (digitalRead(GerkonDev) == 0)
      {
        digitalWrite(RelayDev, HIGH);}
        digitalWrite(GreenLed,HIGH);
      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; }   // получаем серийник(10)
      Serial.println("Card UID: ");
      Serial.println(uidDec); // Выводим UID метки в консоль.
    Serial.println(digitalRead(GerkonDev));//заодно глянем что с герконом
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    digitalWrite(RedLed, HIGH); // по умолчанию же включено
    //if (digitalRead(GerkonDev) == 0){digitalWrite(RelayDev, HIGH);}  //по умолчанию под охраной
      if (uidDec == 1973922155 || 299185877 )
    {
       uidDec = 0;
    if ( State==1 ){

        Serial.println("Security state: Off");
        digitalWrite(RedLed, LOW); //индикация работы выключена
        tone(2, 700, 500); // Делаем звуковой сигнал, Открытие
        State = 0;
        digitalWrite(RelayDev, LOW);//с охраны сняли, на всякий случай выключаем пищалку светилку
      delay(2000); // метку ввели. отсеиваем лишнее
      }
    else
    {
       State=1;
       Serial.println("Security state: On");
       digitalWrite(RedLed, HIGH);
        tone(2, 700, 1000); // Делаем звуковой сигнал, Открытие
        if (digitalRead(GerkonDev) == 0){digitalWrite(RelayDev, HIGH);}
        delay(2000); // метку ввели. отсеиваем лишнее
      }
    }  }
     
  13. b707

    b707 Гуру

    Абсолютно неработоспособный код. Почему - уже писали выше, но автору плевать, похоже.
    Сигналка будет запускаться от любой карты.

    Не первый раз говорю - но почему-то именно работа с RFID привлекает самое большое число тупиц среди "любителей ардуино".
     
    DIYMan и Airbus нравится это.
  14. Unixon

    Unixon Оракул Модератор

    @mf2 , вам же указали на ошибку. Вместо
    Код (C++):
    if (uidDec == 1973922155 || 299185877 )
    должно быть
    Код (C++):
    if ((uidDec == 1973922155L) || (uidDec == 299185877L))
    Это как минимум, дальше код не смотрел.
     
    Airbus и b707 нравится это.
  15. DetSimen

    DetSimen Guest

    Я отступился, ибо вижу, что на автора извели целую рощу стоеросовых деревьев. Пусть у него всё работает как он хочет.
     
    mf2 и Airbus нравится это.
  16. Airbus

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

    Ещё GSM автозапуск ВАЗ-2106
     
    b707 нравится это.
  17. mf2

    mf2 Нерд

    Вах :) сколько еды для тролей) вот только другие карты не отрабатывают событие. Так что господа погромисты умерьте свой пыл. И смиритесь со свой некомпитентностью.
     
    Последнее редактирование: 14 дек 2017
  18. mf2

    mf2 Нерд

    А почему RC522? он тупо дешёвый. Комплект touch button (Dallas semiconductor) стоит 1500 ру считыватель + ещё ключики. Ещё вопросы?
     
  19. mf2

    mf2 Нерд

    Комментарии выше. Был бы в стартовом комплекте touch button. Колхозили бы с ним.
     
  20. DIYMan

    DIYMan Guest

    Есть вопросы, есть. Дядя Петя, ты дурак? (с) один старый фильм.