Помогите срочно!!!

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

  1. mcureenab

    mcureenab Гуру

    Посомтрю бибилиотеку rfid. Тут видимо массив rfid.serNum нужно сравнить с массивами master[5].
     
  2. mcureenab

    mcureenab Гуру

    обновить страницу нужно.
     
  3. NikitOS

    NikitOS Король шутов Администратор

    ну теперь 10
     
  4. mcureenab

    mcureenab Гуру

    Вы откуда библиотеку скачали? Мне какие то не те попадаются.
     
  5. abubakar

    abubakar Нерд

    Спасибо за ответ, но на данном этапе для меня главной задачей стоит создание такого скетча, при помощи которого я бы смог сразу открыть доступ всем 10 карточкам.
    P.S. Недавно у меня появился Ручной 125 КГц EM4100 RFID Копир Писатель Дубликатор (https://ru.aliexpress.com/item/Hand...32718350113.html?spm=2114.13010608.0.0.WBOM4d) при помощи которого я хотел копировать id одного ключа на другие карточки. Но увы частоты дубликатора и rfid модуля не совпадают, а именно у дубликатора 125 КГц, а у rfid 13,56 МГц соответственно. В результате чего модуль(13,56МГц) не видит скопированные на новые брелки ключи (125КГЦ). Кто-нибудь может подсказать как подвести под одну черту обе эти значения, чтобы этот дубликатор мог бы копировать ключ от одного главного брелка и соответственно этот новый ключ на новом брелке мог читать модуль rfid.
     
    Последнее редактирование: 11 мар 2017
  6. abubakar

    abubakar Нерд

    Точно уже и не помню, но мне кажется это было на форуме arduino.ru как я найду страницу дам тебе знать
     
  7. mcureenab

    mcureenab Гуру

    Видимо эта https://github.com/song940/rfid
     
  8. abubakar

    abubakar Нерд

  9. mcureenab

    mcureenab Гуру

    Код (C++):

    // mcureen 3
    /* MOSI: Pin 11 / ICSP-4
    * MISO: Pin 12 / ICSP-1
    * SCK: Pin 13 / ISCP-3
    * SS: Pin 10
    * RST: Pin 9
    */


    #include <SPI.h>
    #include <RFID.h>

    #define SS_PIN 10
    #define RST_PIN 9
    #define RED_LED 6
    #define GREEN_LED 5

    RFID rfid(SS_PIN, RST_PIN);

    const unsigned char master[][5]={
      {227,197,145,117,194},
      {90,63,99,3,5},
      {90,132,142,3,83},
      {250,229,196,3,216},
      {10,101,141,4,230},
      {250,191,109,3,43},
      {10,88,184,4,238},
      {250,243,195,3,201},
      {74,151,2,4,219},
      {74,150,202,4,18},
      {74,12,148,4,214},
      {69,156,215,101,107}
    };// allowed card

    const int master_size = sizeof(master)/sizeof(master[0]);

    bool compare_nums(
      const unsigned char a[5],
      const unsigned char b[5]
    ) {
        for(char i = 5; 0 <= --i; )
        {
          if( a[i] != b[i] ) return false;
        }
        return true;
    }

    bool check_num(
      const unsigned char a[5]
    ){
      for( int i = master_size; 0 <= --i; ){
        if(compare_nums(a, master[i])) return true;
      }
      return false;
    }

    void indication(int led);
    void allow();
    void denied();

    void setup()
    {
      Serial.begin(9600);
      SPI.begin();
      rfid.init();
      pinMode(RED_LED, OUTPUT);
      pinMode(GREEN_LED, OUTPUT);

    }

    void loop()
    {
        if (rfid.isCard())
        {
            if (rfid.readCardSerial())
            {
                    /* Reading card */
                    Serial.println(" ");
                    Serial.println("Card found");
                    Serial.println("Cardnumber:");
                    for (char i = 0; i < 5; i++)
                    {
                      Serial.print(rfid.serNum[i]);
                      Serial.print(" ");
                    }
                    Serial.println();
                    //verification
                    if(check_num(rfid.serNum))
                    {
                      allow();
                    }
                    else
                    {
                      denied();
                    }
             }
        }
        else
        {
          digitalWrite(GREEN_LED, HIGH);
         // rfid.halt();
        }
    }

    void allow()
    {
      Serial.println("Access accept!"); //доступ получен
       digitalWrite(RED_LED, LOW);
       digitalWrite(GREEN_LED, HIGH);
       delay(200);
       digitalWrite(GREEN_LED, LOW);
       tone(8, 2500, 200);
       delay(200);
       digitalWrite(GREEN_LED, HIGH);
       delay(200);
       digitalWrite(GREEN_LED, LOW);
       tone(8, 2500, 200);
       delay(200);
       digitalWrite(RED_LED, LOW);
    }
    void denied()
    {
      Serial.println("Access denied!"); //доступ закрыт
       digitalWrite(RED_LED, HIGH);
       tone(8, 100, 200);
       delay(300);
       digitalWrite(RED_LED, LOW);
       delay(300);
       digitalWrite(RED_LED, HIGH);
       tone(8, 100, 200);
       delay(300);
       digitalWrite(RED_LED, LOW);
       delay(300);
    }
     
    и вот коды которые я хотел бы записать
    карта 1 227,197,145,117,194
    карта 2 90,63,99,3,5
    карта 3 90,132,142,3,83
    карта 4 250,229,196,3,216
    карта 5 10,101,141,4,230
    карта 6 250,191,109,3,43
    карта 7 10,88,184,4,238
    карта 8 250,243,195,3,201
    карта 9 74,151,2,4,219
    карта 10 74,150,202,4,18
    карта 11 74,12,148,4,214
    брелок 69,156,215,101,107
     
    Последнее редактирование: 11 мар 2017
  10. mcureenab

    mcureenab Гуру

    Ошибки исправил. // mcureen 2
     
  11. abubakar

    abubakar Нерд

    Спасибо. Сейчас посмотрю
    Большое спасибо. Наконец-то нашелся добрый человек который решил мою проблему, мучавшую меня несколько дней!:);)
     
  12. mcureenab

    mcureenab Гуру

    Добавил 2 потерянных кода. // mcureen 3
    В общем тестируйте, и жмите "Мне нравится".
    Есть карточки, которые ненадо пускать? На них проверьте, что действительно не пускает.
     
  13. abubakar

    abubakar Нерд

    Проверил, блокирует
    Есть у меня электрический замок буду управлять им с помощью реле. Мне нужно написать в сетапе pinMode(Relay1, OUTPUT) или #define relay1?
     
  14. mcureenab

    mcureenab Гуру

    И то и другое. Соблюдая регистр!
    Но макросы обычно заглавными буквами пишут. Это не обязательно, но так принято.

    Обычно
    Код (C++):
    #define RELAY1 5
    // Часто модуль реле имеет неожиданную логику. На LOW - замыкается, на HIGH размыкается.
    // Укажите уровни пина для открытого и закрытого состояния.
    #define RCLOSE HIGH
    #define ROPEN LOW
     
    пишут в начала скетча, чтобы проще было, например, менять номера пинов. В данном случае 5, но не знаю какой у вас пин. А digitalWrite и pinMode в setup() нужно сунуть, чтобы реле сразу закрыло замок.

    Код (C++):
    void setup()
    {
      Serial.begin(9600);
    ...
      digitalWrite(RELAY1, RCLOSE); // Изначально закрыто
      pinMode(RELAY1, OUTPUT);

    }
     
  15. mcureenab

    mcureenab Гуру

    Очень важный момент. При отключении питания замок должен открыться или закрыться?
    Естественно, после включения замок должен быть закрыт.
     
  16. abubakar

    abubakar Нерд

    Спасибо. Должен закрыться. Если реле активируется замок открывается следовательно если нет питания закрывается. Такой принцип работы
     
  17. mcureenab

    mcureenab Гуру

    С RELAY1 так получается. Не уверен, что 0.8 сек (длительность зеленой цветомузыки) достаточно, чтобы открыть дверь. И другие карточки пока замок открыт и играет зеленая цветомузыка не читаются.
    Из allow убрал двойное отключение красного. Он и так выключен.
    В loop добавил отключение зеленого, когда модуль занят чтением карты. Ну чтобы было симметрично состоянию, когда карты нет.

    Когда красная цветомузыка, то наверное и не важно, что карточки не читаются.
     
  18. mcureenab

    mcureenab Гуру

    Код (C++):
    // mcureen 4
    /* MOSI: Pin 11 / ICSP-4
    * MISO: Pin 12 / ICSP-1
    * SCK: Pin 13 / ISCP-3
    * SS: Pin 10
    * RST: Pin 9
    */


    #include <SPI.h>
    #include <RFID.h>

    #define SS_PIN 10
    #define RST_PIN 9
    #define RED_LED 6
    #define GREEN_LED 5
    #define RELAY1 7
    // Часто модуль реле имеет неожиданную логику. На LOW - замыкается, на HIGH размыкается.
    // Укажите уровни пина RELAY1 для открытого и закрытого состояния.
    #define RCLOSE HIGH
    #define ROPEN LOW


    RFID rfid(SS_PIN, RST_PIN);

    const unsigned char master[][5] PROGMEM =
    {
      {227,197,145,117,194},
      {90,63,99,3,5},
      {90,132,142,3,83},
      {250,229,196,3,216},
      {10,101,141,4,230},
      {250,191,109,3,43},
      {10,88,184,4,238},
      {250,243,195,3,201},
      {74,151,2,4,219},
      {74,150,202,4,18},
      {74,12,148,4,214},
      {69,156,215,101,107}
    };// allowed card

    const int master_size = sizeof(master)/sizeof(master[0]);

    bool compare_nums(
      const unsigned char a[5],
      const unsigned char b[5]
    ) {
        for(char i = 5; 0 <= --i; )
        {
          if( a[i] != b[i] ) return false;
        }
        return true;
    }

    bool check_num(
      const unsigned char a[5]
    ){
      for( int i = master_size; 0 <= --i; ){
        if(compare_nums(a, master[i])) return true;
      }
      return false;
    }

    void indication(int led);
    void allow();
    void denied();

    void setup()
    {
      Serial.begin(9600);
      SPI.begin();
      rfid.init();
      pinMode(RED_LED, OUTPUT);
      pinMode(GREEN_LED, OUTPUT);
      digitalWrite(RELAY1, RCLOSE); // Изначально закрыто
      pinMode(RELAY1, OUTPUT);
    }

    void loop()
    {
        if (rfid.isCard())
        {
            digitalWrite(GREEN_LED, LOW);
            if (rfid.readCardSerial())
            {
                    /* Reading card */
                    Serial.println(" ");
                    Serial.println("Card found");
                    Serial.println("Cardnumber:");
                    for (char i = 0; i < 5; i++)
                    {
                      Serial.print(rfid.serNum[i]);
                      Serial.print(" ");
                    }
                    Serial.println();
                    //verification
                    if(check_num(rfid.serNum))
                    {
                      allow();
                    }
                    else
                    {
                      denied();
                    }
             }
        }
        else
        {
          digitalWrite(GREEN_LED, HIGH);
         // rfid.halt();
        }
    }

    void allow()
    {
     
       Serial.println("Access accept!"); //доступ получен
       digitalWrite(RELAY1, ROPEN);
       digitalWrite(GREEN_LED, HIGH);
       delay(200);
       digitalWrite(GREEN_LED, LOW);
       tone(8, 2500, 200);
       delay(200);
       digitalWrite(GREEN_LED, HIGH);
       delay(200);
       digitalWrite(GREEN_LED, LOW);
       tone(8, 2500, 200);
       delay(200);
       digitalWrite(RELAY1, RCLOSE);
    }

    void denied()
    {
       Serial.println("Access denied!"); //доступ закрыт
       digitalWrite(RED_LED, HIGH);
       tone(8, 100, 200);
       delay(300);
       digitalWrite(RED_LED, LOW);
       delay(300);
       digitalWrite(RED_LED, HIGH);
       tone(8, 100, 200);
       delay(300);
       digitalWrite(RED_LED, LOW);
       delay(300);
    }
     
     
  19. mcureenab

    mcureenab Гуру

    Еще замок может щелкать через каждые 0.8 сек, пока карточка приложена.
     
  20. abubakar

    abubakar Нерд

    Спасибо тебе, только ты мне помогаешь. А почему может щелкать? Это хорошо?