RFID как карты доступа

Тема в разделе "Проводная и беспроводная связь", создана пользователем Крапивин, 2 сен 2016.

  1. Крапивин

    Крапивин Нерд

    Любые NFC карты и брелки. занесённые в память . дают команду электро мотору Открыть или закрыть..

    Помогите разобраться, всё работало, хотел добавить код, чтоб открывать, дистанционно через Блютуз.
    через блютуз не работает, а по картам всё продолжает срабатывать. в чём остановка.
    если зарэмить обработку, работу по картам, то блютуз команды проходят, и замок срабатывает.
    Пожалуйста Подскажите что тут не так.

    Код (C++):
    #include <SPI.h>

    #include <MFRC522.h>
    #include <LiquidCrystal_I2C.h>
    // LiquidCrystal_I2C lcd(0x27,16,2);  //  SDA - A4;  SCL - A5

    // два Pin (SS и RST) допускают произвольное подключение и конфигурируются в коде.
    // !(SS - он же - SDA).
    #define SS_PIN 10
    #define RST_PIN 9
    #define ted 5  // замок с мотором   #5
    #define bet 6  // замок с мотором
    //int but =0;

    int Rkod;

    MFRC522 mfrc522(SS_PIN, RST_PIN);
    unsigned long uidDec, uidDecTemp;

    void setup() {               // **********************************************************

      Serial.begin(9600);     // Initialize serial communications with the PC.
      Serial.println("Prilozhite kartu .");
    //    lcd.init();  // Активировать дисплей
    //   lcd.backlight(); // подсветка дисплея
    //   lcd.print(" Zamok Nevidimka");
      SPI.begin();  //  инициализация SPI / Init SPI bus.
      mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.

       pinMode(ted , OUTPUT);
       pinMode(bet , OUTPUT);
     
    }

    void loop()  {        //   ****************************************************************

      // Поиск новой карточки / Look for new cards.
      if ( ! mfrc522.PICC_IsNewCardPresent()) {
        return;
      }

      // Выбор карточки / Select one of the cards.
      if ( ! mfrc522.PICC_ReadCardSerial()) {
     
      uidDec = 0;

      // Выдача серийного номера карточки "UID".
      for (byte i = 0; i < mfrc522.uid.size; i++)
      {
        uidDecTemp = mfrc522.uid.uidByte[i];
        uidDec = uidDec*256+uidDecTemp;
      }
      Serial.println("Serijnyj nomer karty  : ");
      Serial.print(uidDec);

      // ------------------------

       if (uidDec == 124хххххх)
      {

        Serial.println("  Hi Sergey");
        digitalWrite(ted, HIGH);
    //   lcd.setCursor(5, 1);
    //    lcd.print(" Sergey ");
      }

      else  // если "UID" номер карты не совпал.
      {
        //            
        digitalWrite(ted, LOW);
    //    lcd.setCursor(0, 1);
    //    lcd.print(" ALARM *****");
    delay(30000); // пауза 30 секунды.
      }    
      }

    //    - - - - - - - - - -- - - - - -- - - -- - - - - - - - - - - - - - - - - - -

    if (Serial.available() >0 ) {     //если пришли данные  
        Rkod = Serial.parseInt();   // считываем байт Serial.read();
         
    Serial.print(Rkod);  
    Serial.println();
    }
       
    if ( Rkod == 125 ) {         //    --------------------------------
      digitalWrite(ted, HIGH); delay(100); digitalWrite(ted, LOW); // lcd.setCursor(0, 1);
    //  lcd.print("OTKRITO po Radio");}
    Serial.print("   Pabotaet  ");
    /*  Serial.println("===== ");
    but = analogRead(0);  // Кнопка или датчик возврата замка
    if ( but >700); {digitalWrite(tet,HIGH); delay(100); digitalWrite(tet,LOW); }
    //Serial.println("Rabotaet ");
    */

      delay(2000); // пауза 3 секунды.
    }
    }
     
    Последнее редактирование: 2 сен 2016
  2. Tomasina

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

    если убрать это:
    Код (C++):
     if (!mfrc522.PICC_IsNewCardPresent())
      {
        return;
      }
    будет работать?
     
  3. Крапивин

    Крапивин Нерд

    нет не работает. код начал выдавать в сериал порт. всё подряд.
     

    Вложения:

    • com11.jpg
      com11.jpg
      Размер файла:
      9,7 КБ
      Просмотров:
      525
    Последнее редактирование: 2 сен 2016
  4. Крапивин

    Крапивин Нерд

    MFRC и управление по радио,вместе не работают.
     
  5. Tomasina

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

    зачем пауза в конце? Ведь во время нее может придти код, который будет проигнорирован.
    Код (C++):
    #include <SPI.h>
    #include <MFRC522.h>
    #include <LiquidCrystal_I2C.h>
    // LiquidCrystal_I2C lcd(0x27,16,2);  //  SDA - A4;  SCL - A5

    // два Pin (SS и RST) допускают произвольное подключение и конфигурируются в коде.
    // !(SS - он же - SDA).

    #define SS_PIN     10
    #define RST_PIN    9
    #define TED_PIN    5  // замок с мотором   #5
    #define BET_PIN    6  // замок с мотором
    #define BUTTON_PIN 8  // кнопка между пином и GND

    enum {CLOSE, OPEN, ALARM};
    unsigned int accessCode;

    MFRC522 mfrc522(SS_PIN, RST_PIN);

    void setup()                // **********************************************************
    {
      Serial.begin(9600);     // Initialize serial communications with the PC.
      Serial.println("Prilozhite kartu .");
      //    lcd.init();  // Активировать дисплей
      //   lcd.backlight(); // подсветка дисплея
      //   lcd.print(" Zamok Nevidimka");
      SPI.begin();  //  инициализация SPI / Init SPI bus.
      mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.

      pinMode(TED_PIN , OUTPUT);
      pinMode(BET_PIN , OUTPUT);
      pinMode(BUTTON_PIN , INPUT_PULLUP);

    }

    void loop() //   ****************************************************************
    {
      accessCode = 0;

      checkRFID();
      checkBluetooth();
      checkButton();

      switch (accessCode)
      {
        case 124:
          {
            Serial.println("  Hi Sergey");
            door(OPEN);
            break;
          }

        case 125:
          {
            Serial.println("OTKRITO po Radio");
            //lcd.print("OTKRITO po Radio");
            door(OPEN);
            break;
          }

        case 777:
          {
            Serial.println("OTKRITO po knopke");
            //lcd.print("OTKRITO po knopke");
            door(OPEN);
            break;
          }

        default:  // если код доступа не совпал с известными.
          {
            Serial.println(" ALARM *****");
            //    lcd.print(" ALARM *****");
            door(ALARM);
          }
      }
    }

    //    - - - - - - - - - -- - - - - -- - - -- - - - - - - - - - - - - - - - - - -
    void checkRFID()
    {
      // Поиск новой карточки / Look for new cards.
      if (! mfrc522.PICC_IsNewCardPresent())
      {
        accessCode = 0;
        return;
      }

      // Выбор карточки / Select one of the cards.
      if (! mfrc522.PICC_ReadCardSerial())
      {
        unsigned long uidDecTemp = 0;

        // Выдача серийного номера карточки "UID".
        for (byte i = 0; i < mfrc522.uid.size; i++)
        {
          uidDecTemp = mfrc522.uid.uidByte[i];
          accessCode = accessCode * 256 + uidDecTemp;
        }
        Serial.println("Serijnyj nomer karty  : ");
        Serial.print(accessCode);
      }
    }

    //    - - - - - - - - - -- - - - - -- - - -- - - - - - - - - - - - - - - - - - -
    void checkBluetooth()
    {
      if (Serial.available()) //если пришли данные
      {
        accessCode = Serial.parseInt();   // считываем байт Serial.read();
        Serial.print(accessCode);
        Serial.println();
      }
    }

    //    - - - - - - - - - -- - - - - -- - - -- - - - - - - - - - - - - - - - - - -
    void checkButton() // Кнопка или датчик возврата замка
    {
      if (analogRead(BUTTON_PIN) > 700) accessCode = 777;
    }


    //    - - - - - - - - - -- - - - - -- - - -- - - - - - - - - - - - - - - - - - -
    void door(byte state) // управлением замком
    {
      if (state == OPEN)
      {
        Serial.print("Zamok otkryt!");
        digitalWrite(TED_PIN, HIGH);
        delay(3000);
        digitalWrite(TED_PIN, LOW);
        Serial.print("Zamok zakryt!");
      }
      else if (state == CLOSE)
      {
        Serial.print("Zamok zakryt!");
        digitalWrite(TED_PIN, LOW);
        delay(3000);
      }
      else if (state == ALARM)
      {
        Serial.print("ALARM!");
        digitalWrite(BET_PIN, HIGH);
        delay(30000);
        digitalWrite(BET_PIN, LOW);
      }
    }
     
     
    Крапивин нравится это.
  6. Крапивин

    Крапивин Нерд

    С пасибо Tomasina

    Какой КОТ может прийти если пауза в конце ?

    извини это шутка.

    Спасибо за код. я как раз тоже подумал что всё можно завернуть в switch .
    но подумал что код ещё увеличится и скорость будет меньше.
    теперь думаю что так тоже можно спасибо.


    да только я перенёс, код управление с радио кнопки, в начало, ещё до считывателя RFID карт.
    и всё заработало, как надо.


    Код (C++):
    void loop()  {        //   ****************************************************************

    if (Serial.available()){   // упр. замком. с радио.
        Rkod = Serial.parseInt();
        Serial.print(Rkod);
        if ( Rkod == 125********** ) {         //    --------------------------------
      digitalWrite(ted, HIGH); delay(1000); digitalWrite(ted, LOW);  Serial.println("   Pabotaet  ");}}
      // --------------------------------------------------------------------------------------------------------------------
      // Поиск новой карточки / Look for new cards.
      if ( ! mfrc522.PICC_IsNewCardPresent()) {
        return;  }
     
      // Выбор карточки / Select one of the cards.
      if ( ! mfrc522.PICC_ReadCardSerial()) {   return;  }
      uidDec = 0;