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

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

  1. abubakar

    abubakar Нерд

    Здарова всем
    Хочу сделать rfid замок. Все работает. Все классно, но единственная проблема в том, что работает только с одной карточки(метки). А я хочу чтобы он работал с 10 картами. Подскажите куда что писать. Заранее спасибо.
     

    Вложения:

  2. NikitOS

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

    ммм нужно вписать как ни-будь массив\объект словарь е если что то из этого словаря пришло то открываем замок и можете скетч здесь показать (не охото скачивать)
     
    Tomasina нравится это.
  3. abubakar

    abubakar Нерд

    /* 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);

    unsigned char reading_card[5]; //for reading card
    unsigned char master[5] = {227,197,145,117} ; // allowed card
    unsigned char i;


    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 (i = 0; i < 5; i++)
    {
    Serial.print(rfid.serNum);
    Serial.print(" ");
    reading_card = rfid.serNum;
    }
    Serial.println();
    //verification
    for (i = 0; i < 5; i++)
    {
    if (reading_card!=master)
    {
    break;
    }
    }
    if (i == 5)
    {
    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
     
  4. NikitOS

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

    Код (C++):
    unsigned char master[10] = {
    227,197,145,117,194 , 90,63,99,3,5 ,90,132,142,3,83   , ххх , ххх ,
    ххх , ххх , ххх , ххх , ххх
    };


    вмесо ххх код
     
  5. NikitOS

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

    вместо этой строки
    unsigned char master[5] = {227,197,145,117} ; // allowed card
     
  6. abubakar

    abubakar Нерд

    Спасибо за ответ. Но теперь пишет вот это
    too many initializers for 'unsigned char [10]'
     
  7. NikitOS

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

    хммм...
     
  8. NikitOS

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

    слишком много...
    попробуйте уменьшить кол-во кодов в массиве по одному и скажите сколько пройдет тогда будем дальше
     
  9. Tomasina

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

    Ну так очевидно, что если массив master[10] , то в нем должно быть ровно 10 элементов ;)
     
  10. abubakar

    abubakar Нерд

    посмотрю
     
  11. abubakar

    abubakar Нерд

    Теперь пишет вот это:
    sketch_mar10d:20: error: expected ',' or ';' before numeric constant

    sketch_mar10d:20: error: expected declaration before '}' token

    unsigned char master[10] = {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, 10 74,150,202,4,18}; // allowed card

    ^

    exit status 1
    expected '}' before numeric constant
     
  12. Jedi

    Jedi Гик

    Ребяты, а как вы хотите запихнуть экую кучку элементов в массив, который вы определили размером в 10 элементов всего?
     
  13. abubakar

    abubakar Нерд

    не получается
     
  14. Jedi

    Jedi Гик

  15. mcureenab

    mcureenab Гуру

    Ну так не пишите [10]. И ошибка: между 10 74 нет запятой. Это или одно число должно быть - 1074 или числа через запятую 10, 74.
    Компилятор даже стрелочкой показывает вверх где ошибка.

    Код (C++):
    unsigned char master[] = {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, 10, 74,150,202,4,18}; // allowed card
     
  16. abubakar

    abubakar Нерд

    Спасибо тебе огромное. Скетч загрузился в плату, но теперь он пишит что все карточки чужие. Как быть?
     
  17. mcureenab

    mcureenab Гуру

    Только я что то думаю, раз у вас коды из пятерок чисел состоят, то лучше массив из массивов сделать.
    Код (C++):
    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} // тут вы что то накосячили, я убрал число 10. проверьте список
    };// allowed card
     
    Последнее редактирование: 11 мар 2017
  18. NikitOS

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

    наверно чтобы карты были родные то нужно все карты пучком к сканеру пихать;)
    а точнее он думает что вы должны дать карту с кодом этого массива
    т.е все из массива для дуино это 1 карта:):)
     
  19. NikitOS

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

    я ваще только 1 ваше сообщение вижу
     
  20. mcureenab

    mcureenab Гуру

    У вас по моему хрень, не проверка написана.

    Это проверка??? Что тут проверяется???

    Код (C++):

    for (i = 0; i < 5; i++)
    {
      Serial.print(rfid.serNum);
      Serial.print(" ");
      reading_card = rfid.serNum;
    }
    Serial.println();
    //verification
    for (i = 0; i < 5; i++)
    {
      if (reading_card!=master)
      {
        break;
      }
    }