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

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

  1. abubakar

    abubakar Нерд

    Теперь ни одна карта не действует
     
  2. abubakar

    abubakar Нерд

    а теперь заработало. Я скопировал const unsigned char из того скетча который ты мне давал ранее. Теперь реле должно работать.
    Спасибо огромное. Я могу тебе чем-то помочь?:)
     
  3. mcureenab

    mcureenab Гуру

    Потому что реле обязательно отключается после цветомузыки даже когда карту еще не убрали. Но это такой короткий промежуток времени, что реле и прочая механика наверное не успеет даже дернуться. В общем какой то короткий импульс будет. А насколько он критичен трудно сказать.
    Лишние движения механике по любому не полезны. Но тут их может и не будет.
     
  4. mcureenab

    mcureenab Гуру

    Это может из-за PROGMEM? В принципе на 10 карточек памяти хватает. И на больше хватит, но программная память всяко больше.
    Выложи тогда финальную версию скетча. Я то свою не тестировал. Не на чем. И про замок тоже стоит написать, чтобы решение готовое было. Может еще кому пригодится.
     
  5. abubakar

    abubakar Нерд

    а так ты тоже сделал такой проект или я неправильно понял?
     
  6. abubakar

    abubakar Нерд

    // 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]={
    {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},
    {69,156,215,101,107} // тут вы что то накосячили, я убрал число 10 и остаток кодов. проверьте список
    };// 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 != b ) return false;
    }
    return true;
    }

    bool check_num(
    const unsigned char a[5]
    ){
    for( int i = master_size; 0 <= --i; ){
    if(compare_nums(a, master)) 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);
    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);
    }
     

    Вложения: