RFID +реле. вкл/выкл

a2kuz
Offline
Зарегистрирован: 17.04.2017

Подскажите пожалуйста, как сделать чтоб, реле  постоянно включенно подносим метку (убираем метку) реле выключенно и остается в таком состоянии пока не поднести метку еще раз. 
что типо вкл/выкл без таймера. 

#include <SPI.h>
    #include <MFRC522.h>
    #define NEW_UID {0xDE, 0xAD, 0xBE, 0xEF}
    #define SS_PIN 10
    #define RST_PIN 9
    #define DD 4 // Pin D4 --> выход на реле
    #define ZZ 5 // Pin D4 --> выход на активный зумер
    #define REL DD // REL - открывает дверь
    MFRC522 mfrc522(SS_PIN, RST_PIN);        // MFRC522
    MFRC522::MIFARE_Key key;

    // готовим массив карт с флагами доступа 0-нет доступа, 1-естьдоступ (спец пропуска)
    struct Cards { 
      String id;
      int flag;
    };
    struct Cards cards[8] ={{"22455977",1},{"5438698",1},{"16371451",0},{"20371287",1},{"4067496491",1},{"964301100",1},{"2524519168",1},{"1645645646",1}};
boolean work=false;
unsigned int CUR_TIME;
unsigned int ALL_TIME;

void setup(void)
{

    while (!Serial);           // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
    SPI.begin();               // Init SPI bus
    mfrc522.PCD_Init();        // Init MFRC522 card
  
    pinMode(4,OUTPUT);
    digitalWrite(4,HIGH);
    pinMode(5,OUTPUT);
    digitalWrite(5,LOW);
    Serial.begin(115200);
    Serial.print("setup begin\r\n");
}
void loop(void)
{
  ALL_TIME=(millis()/1000);
  if ((ALL_TIME - CUR_TIME)>=5){
     work=true;
     work=false;
     CUR_TIME=ALL_TIME;
    }  
    if (work==false){
          work=true;
       //------------------------РАБОТАЕМ СО СЧИТЫВАТЕЛЕМ КАРТ----------------------------
       // Look for new cards, and select one if present
            if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
                delay(50);
                work=false;
                return;
            }
    
            String UID = dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
         //   mfrc522.PICC_HaltA();
    
            Serial.print(F("Card UID: "));
            Serial.print(UID);
            Serial.println();
            
    //----------------------------------открытие дверей по спец пропускам--------------------------------
        if (UID!=""){
              for (int i = 0; i <= 7; i++) {
                    if (cards[i].id==UID && cards[i].flag==1) {
                      DoorOpen(UID);
                      work=false;
                      return;
                    }
              }
              
          }
    }
    work=false;
} //это конец LOOPа
//------------------------выуживаем UID из карты как числовое значение----------------------------

String dump_byte_array(byte *buffer, byte bufferSize) {
 //   String s;
    unsigned long uiddec = 0;
//    unsigned long temp;
    char uid[8];
    for (byte m = (bufferSize > 4 ? (bufferSize - 4) : 0); m < bufferSize; m++) { //берем только последние 4 байта и переводим в десятичную систему
        unsigned long p = 1;
        for(int k = 0; k < bufferSize-m-1; k++) {
          p = p*256;
        }
        uiddec += p*buffer[m];
     //   s = s + (buffer[m] < 0x10 ? "0" : "");
     //   s = s + String(buffer[m], HEX);
    }
//    s.toCharArray(uid, 8);    
    return String(uiddec);
}

//-----------открытие двери
void DoorOpen(String uid){
    Serial.print(F("DOOR-OPEN!"));
    Serial.println();
    digitalWrite( REL, LOW );
    for (int i = 0; i <= 6; i++) {
          digitalWrite( ZZ, HIGH ); delay(250);digitalWrite( ZZ, LOW );delay(250);
          digitalWrite( ZZ, HIGH ); delay(250);digitalWrite( ZZ, LOW );delay(250);
       }
     digitalWrite( REL, HIGH );
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну как, как... Заведите булеву переменную tipo_vkl = LOW и инвертируйте ее каждый раз, когда правильная карта опознана. Затем - можно тупо сделать digitalWrite( REL, tipo_vkl );

 

a2kuz
Offline
Зарегистрирован: 17.04.2017

А можете помочь исправив код как нужно и где ?! был бы очень благодарен. я только учусь и не совсем понимаю . Спасибо

sadman41
Offline
Зарегистрирован: 19.10.2016

Я бы тоже был бы очень благодарен, если бы вы мне ремонт в квартире доделали. А то я всё скетчи тут правлю и руки совсе не доходят! Сделаете?!

a2kuz
Offline
Зарегистрирован: 17.04.2017

Я Вас понял. Спасибо.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

sadman41 пишет:

Я бы тоже был бы очень благодарен, если бы вы мне ремонт в квартире доделали. А то я всё скетчи тут правлю и руки совсе не доходят! Сделаете?!

+5

b707
Offline
Зарегистрирован: 26.05.2017

vosara пишет:

sadman41 пишет:

Я бы тоже был бы очень благодарен, если бы вы мне ремонт в квартире доделали. А то я всё скетчи тут правлю и руки совсе не доходят! Сделаете?!

+5

в очередь!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Кто тут крайний на бесплатный ремонт своей квартиры?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Я за вами буду. Соседка сверху, сучка крашена, затопила :(

a2kuz
Offline
Зарегистрирован: 17.04.2017

Я вроде не просил написать мне скетч заново. я попросил внести изменения если это трудно ДЛЯ ВАС МОЖНО НЕ ПИСАТЬ КОММЕНТЫ.( особенно тем людям, которые раздули за ремонт.) и ты если sadman41  умеешь , но не хочешь помочь, то не нужно писать комментарии зарабатывая баллы. Еше раз Спасибо

PS: здесь много людей помогали. 

 

b707
Offline
Зарегистрирован: 26.05.2017

a2kuz не заводись. Ну пошутили немного, что с того. Баллы постами тут не зарабатывают, одна радость - постебаться над кем-то :)

a2kuz
Offline
Зарегистрирован: 17.04.2017

b707, Я не против но я вроде не тут написал а прошу помощи у людей которые знают. тем более для многих тут это пустяк.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Ну так Вам же дал, тот же sadman41, полный ответ на Ваш вопрос в #1 !!!

infyniti
Offline
Зарегистрирован: 15.07.2017

[Цитата = a2kuz]

Подскажите пожалуйста, как сделать чтоб, реле постоянно включенно подносим метку (убираем метку) реле выключено и остается в таком состоянии пока не поднести метку еще раз. 
что типо вкл / выкл без таймера. 


 

[/ Цитата]


#innclude <SPI.h>
    #include <MFRC522.h>
    #define NEW_UID {0xDE, 0xAD, 0xBE, 0xEF}
    #define SS_PIN 53
    #define RST_PIN 5
    #define DD 7 // Pin D4 --> выход на реле
    #define ZZ 6 // Pin D4 --> выход на активный зумер
    #define REL DD // REL - открывает дверь
    MFRC522 mfrc522(SS_PIN, RST_PIN);        // MFRC522
    MFRC522::MIFARE_Key key;
 
boolean running = false;
 
    // готовим массив карт с флагами доступа 0-нет доступа, 1-естьдоступ (спец пропуска)
    struct Cards { 
      String id;
      int flag;
    };
    struct Cards cards[8] ={{"371361701",1},{"5438698",1},{"16371451",0},{"20371287",1},{"4067496491",1},{"964301100",1},{"2524519168",1},{"1645645646",1}};
boolean work=false;
unsigned int CUR_TIME;
unsigned int ALL_TIME;
 
void setup(void)
{
 
    while (!Serial);           // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
    SPI.begin();               // Init SPI bus
    mfrc522.PCD_Init();        // Init MFRC522 card
  
    pinMode(7,OUTPUT);
    digitalWrite(7,HIGH);
    pinMode(6,OUTPUT);
    digitalWrite(6,LOW);
    Serial.begin(9600);
    Serial.print("setup begin\r\n");
}
void loop(void)
{
  ALL_TIME=(millis()/1000);
  if ((ALL_TIME - CUR_TIME)>=5){
     work=true;
     work=false;
     CUR_TIME=ALL_TIME;
    }  
    if (work==false){
          work=true;
       //------------------------РАБОТАЕМ СО СЧИТЫВАТЕЛЕМ КАРТ----------------------------
       // Look for new cards, and select one if present
            if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
                delay(50);
                work=false;
                return;
            }
    
            String UID = dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
         //   mfrc522.PICC_HaltA();
 
             Serial.println();     
            Serial.print(F("Card UID: "));
            Serial.print(UID);
            Serial.println();
            
    //----------------------------------открытие дверей по спец пропускам--------------------------------
 
        if (UID!=""){
         running = !running;                // меняем значение булевой переменной
        
              for (int i = 0; i <= 7; i++) {
                    if (cards[i].id==UID && cards[i].flag==1) {
                      DoorOpen(UID);
                      work=false;
                      return;
                    }
              }
              
          }
      
 
    work=false;
    }
} //это конец LOOPа
//------------------------выуживаем UID из карты как числовое значение----------------------------
 
String dump_byte_array(byte *buffer, byte bufferSize) {
 //   String s;
    unsigned long uiddec = 0;
//    unsigned long temp;
    char uid[8];
    for (byte m = (bufferSize > 4 ? (bufferSize - 4) : 0); m < bufferSize; m++) { //берем только последние 4 байта и переводим в десятичную систему
        unsigned long p = 1;
        for(int k = 0; k < bufferSize-m-1; k++) {
          p = p*256;
        }
        uiddec += p*buffer[m];
     //   s = s + (buffer[m] < 0x10 ? "0" : "");
     //   s = s + String(buffer[m], HEX);
    }
//    s.toCharArray(uid, 8);    
    return String(uiddec);
}
 
//-----------открытие двери
void DoorOpen(String uid){
    Serial.print(F("DOOR-OPEN!"));
    Serial.println();
    digitalWrite( REL, LOW );
    for (int i = 0; i <= 6; i++) {
          digitalWrite( ZZ, HIGH ); delay(250);digitalWrite( ZZ, LOW );delay(250);
          digitalWrite( ZZ, HIGH ); delay(250);digitalWrite( ZZ, LOW );delay(250);
       }
      if (running == true){
  
  
     digitalWrite( REL, HIGH );
      }
}

както так

infyniti
Offline
Зарегистрирован: 15.07.2017

называется найди три отличия

 

infyniti
Offline
Зарегистрирован: 15.07.2017

пины не забуть поменять на свои

 

a2kuz
Offline
Зарегистрирован: 17.04.2017

Спасибо добрый человек, сегодня буду пробывать.

satelit 2
Offline
Зарегистрирован: 04.12.2016

вот тоже переделываю скетч дмитрия осипова, мне этот скетч более нравиться, с возможностью записи новых карточек без перезаливки скетча. надеюсь он не обидется


#include <EEPROM.h> // Подключаем библиотеку для записи в энергонезависимую память "Card UID" / уникальный номер NFC карты.
#include <SPI.h>
//#include <Wire.h> // Подключаем библиотеку для шины I2C / для работы дисплея.

// ---------------------------------
// Скачать библиотеки для дисплея. <a data-cke-saved-href="https://yadi.sk/d/9F_uW1wIZUDna" href="https://yadi.sk/d/9F_uW1wIZUDna" rel="nofollow">https://yadi.sk/d/9F_uW1wIZUDna</a>
//#include <Adafruit_GFX.h> // Скачанная библиотека для дисплея.
//#include <Adafruit_SSD1306.h> // Скачанная библиотека для дисплея.
// ---------------------------------

// Библиотека "RFID", для RC522 Card Read. Скачать <a data-cke-saved-href="http://yadi.sk/d/6XLMLCuxSjdGa" href="http://yadi.sk/d/6XLMLCuxSjdGa" rel="nofollow">http://yadi.sk/d/6XLMLCuxSjdGa</a>
#include <MFRC522.h> // скачанная библиотека "RFID" для RC522 Card Read Module.
// ****************************************

// Для дисплея.
// Дисплей подключаем по 2 проводам, на Arduino Uno (A4 = SDA) и (A5 = SCL).  
//#define OLED_RESET 4
//Adafruit_SSD1306 display(OLED_RESET);
// --------------------------------------

/*
Для RC522 Card Read Module. подключение для Arduino Uno и Mega, производится к разным Pin!
 ----------------------------------------------------- Nicola Coppola
 * Pin layout should be as follows:
 * Signal     Pin              Pin               Pin
 *            Arduino Uno      Arduino Mega      MFRC522 board
 * ------------------------------------------------------------
 * Reset      9                5                 RST
 * SPI SS     10               53                SDA
 * SPI MOSI   11               51                MOSI
 * SPI MISO   12               50                MISO
 * SPI SCK    13               52                SCK
 
 */

// Два Pin (SS и RST) допускают произвольное подключение и конфигурируются в коде.
// !(SS - он же - SDA).
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);  // Объект MFRC522C / reate MFRC522 instance.
unsigned long uidDec, uidDecTemp;  // Для отображения номера карточки в десятичном формате.
// **************************************************************

// Массив для хранения 50 "Card UID" / уникальных номеров NFC карт, считанных из EEPROM. 
unsigned long CardUIDeEPROMread[] = {
  0,1,2,3,4,5};//,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
  //30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49};

int ARRAYindexUIDcard; // Индекс для массива CardUIDeEPROMread.

int EEPROMstartAddr; // Стартовая ячейка памяти для записи / чтения EEPROM "Card UID".
// -----------------------------

int LockSwitch; // Замок / Переключатель / Блокиратор.

int PiezoPin = 14; // Piezo / Динамик.
int zPin = 15;// пин замка
void setup(){   
  // Serial.begin(9600); 

 // display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the  0.96" 128X64 OLED LCD Display)I2C АДРЕС.

  SPI.begin(); //  инициализация SPI / Init SPI bus.
  mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card.
  pinMode(zPin, OUTPUT);
  pinMode(PiezoPin, OUTPUT);
  digitalWrite(PiezoPin, HIGH),delay(100),digitalWrite(PiezoPin, LOW); // Подадим писк при запуске.

 // DisplayWAiT_CARD(); // Запускаем функцию, заставка дисплея.

  EEPROMreadUIDcard(); // Запускаем функцию, для перезаписи массива CardUIDeEPROMread, данными из EEPROM.

  // Если хотите увидеть в Serial мониторе все записанные № Card-UID, раскомментируйте строку.
  // for(int i = 0; i <= 49; i++)Serial.print(i),Serial.print(" ---- "),Serial.println(CardUIDeEPROMread[i]);

  //  for (int i = 0; i < 512; i++)EEPROM.write(i, 0); // EEPROM Clear / Очистить / стереть EEPROM. 
}

void loop() {

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

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

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

  // Каждый раз подготавливаем дисплей для записи. 
  //display.clearDisplay(); // Clear the buffer. / Очистить буфер дисплея.
  //display.setTextColor(WHITE); // Цвет текста.
  //display.setTextSize(2); // Размер текста (2).
 // display.setCursor(0,0); // Устанавливаем курсор в колонку / Pixel 0, строку / Pixel 0. 

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

  // uidDec - Это полученный "Card UID" / уникальный номер NFC карты.

  // Записываем "вручную" в sketch № "Card UID" карты администратора, для запуска "режима записи" в EEPROM "Card UID" пользователей.
  // Проверяем если "Card UID" совпадёт с заранее записанным "Card UID" администратора, или LockSwitch больше 0.
  // Внимание!, замените "Card UID" администратора № 4198836864, на свой "Card UID". 
  if (uidDec == 2089070113 || LockSwitch > 0)EEPROMwriteUIDcard(); // Запускаем функцию записи в EEPROM "Card UID" пользователей.
  // ----------------------------------------


  // Для режима управления.
  if (LockSwitch == 0) // только если находимся в "режиме управления".
  {
    // Подготавливаемся для перебора массива CardUIDeEPROMread.
    for(ARRAYindexUIDcard = 0; ARRAYindexUIDcard <= 5; ARRAYindexUIDcard++) 
    {
      // фильтр, на тот случай если мы не запишим все 50 переменных массива, в не записанных переменных массива будут значение 0.    
      if (CardUIDeEPROMread[ARRAYindexUIDcard] > 0) // Перебираем весь массив CardUIDeEPROMread, фильтруем от 0.
      {
        //  Перебираем весь массив CardUIDeEPROMread, Если поднесённая карта совпадёт с одной из 50  переменных массива.       
        if (CardUIDeEPROMread[ARRAYindexUIDcard] == uidDec) // Если обнаружено совпадение с поднесенной картой.
        {
          CommandsCARD(); // Запускаем функцию для выполнения любых действий, в зависимости от "Card UID" поднесённой карты.
          break; // Выходим, останавливаем проверку / перебор / поиск, в массиве CardUIDeEPROMread.
          // Полезная вещь! Итак, в момент перебора массива, в случае совпадения с поднесенным "Card UID", мы останавливаем 
          // цикл  for, с помощью break, и в значении ARRAYindexUIDcard сохранится индекс массива, в котором находился "Card UID".
          // Знания значения индекса массива, упростит выполнение других задач. 
        }
      }
    }   
    // ARRAYindexUIDcard == 50 Означает, что мы перебрали весь массив от 0 до 49, и не обнаружили совпадений с поднесённой "Card UID".
    // То есть поднесенная карта отсутствует в базе, выводим на дисплей "не найдена карта" и № "Card UID" карты.
   // if (ARRAYindexUIDcard == 50)display.println("NOT  Found CARD-UID"),display.println(uidDec),display.display();
    delay(2000);    
    ARRAYindexUIDcard = 0;
   // DisplayWAiT_CARD(); // Запускаем функцию, заставка дисплея.
  }
} 

// ******************************************
// ******************************************



// Делаем функцию, записи в EEPROM "Card UID" пользователей, максимум 50 "Card UID".
void EEPROMwriteUIDcard() {

  if (LockSwitch == 0) // Если находились в режиме управления.
  {
   // display.println("   START    RECORD   Card UID   CLIENT"); 
   // display.display(); 
    for(int i = 0; i <= 2; i++)delay(500),digitalWrite(PiezoPin, HIGH),delay(500),digitalWrite(PiezoPin, LOW); // 3 раза пискнем.
  } 

  // -------

  // Для пропуска записи в ячейку памяти.
  if (LockSwitch > 0) // Если находимся в "режиме записи".
  {
    // Внимание!, замените "Card UID" администратора № 4198836864, на свой "Card UID". 
    if (uidDec == 4198836864) // Если поднесена карта администратора. 
    {
     // display.println("   SKIP     RECORD   "); 
     // display.setTextSize(3);
      //display.setCursor(40,40);
     // display.println(EEPROMstartAddr/5); // Выводим № пропущенной ячейки памяти.
     // display.display();

      EEPROMstartAddr += 5; // Пропускаем запись в ячейку памяти, если не хотим записывать туда "Card UID".

      digitalWrite(PiezoPin, HIGH),delay(200),digitalWrite(PiezoPin, LOW); // 1 раз пискнем.
    }

    else // Иначе, то есть поднесена карта для записи.

    // "Card UID" / № карты это "длинное число", которое не поместится в одну ячейку памяти EEPROM. 
    // Разрубим "длинное число" на 4 части, и кусками, запишем его в 4 ячейки EEPROM. Начинаем запись с адреса EEPROMstartAddr.

    {
      EEPROM.write(EEPROMstartAddr, uidDec & 0xFF); 
      EEPROM.write(EEPROMstartAddr + 1, (uidDec & 0xFF00) >> 8); 
      EEPROM.write(EEPROMstartAddr + 2, (uidDec & 0xFF0000) >> 16); 
      EEPROM.write(EEPROMstartAddr + 3, (uidDec & 0xFF000000) >> 24);
      // Записали!.
      delay(10);
      // --
     // display.println("RECORD OK! IN MEMORY "); 
     // display.setTextSize(3);
     // display.setCursor(50,40);
     // display.println(EEPROMstartAddr/5); // Выводим № записанной ячейки памяти.
     // display.display();

      EEPROMstartAddr += 5; // Прибавляем 5 к стартовой ячейки записи.
      for(int i = 0; i <= 40; i++)delay(5),digitalWrite(PiezoPin, HIGH),delay(5),digitalWrite(PiezoPin, LOW); // пискнем.
    }   
  }

  LockSwitch++; // Разблокируем режим записи, и заблокируем режим управления. 

  if (EEPROMstartAddr/5 == 5) // если дошли до 50. 
  {
    delay(2000);
   // display.clearDisplay(); // Clear the buffer. / Очистить буфер.
   // display.setTextColor(WHITE); // Цвет текста.
   // display.setTextSize(3); // Размер текста (3).
   // display.setCursor(0,0); 
   // display.println("RECORD FINISH"); 
    //display.display();


    digitalWrite(PiezoPin, HIGH),delay(3000),digitalWrite(PiezoPin, LOW); // Длинный писк.

    EEPROMstartAddr = 0;   
    uidDec = 0;
    ARRAYindexUIDcard = 0;

    EEPROMreadUIDcard(); // Запускаем функцию, для перезаписи массива CardUIDeEPROMread, данными из EEPROM.
  } 
}

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


// Делаем функцию, перезаписи массива CardUIDeEPROMread, данными из EEPROM.
void EEPROMreadUIDcard()
{
  for(int i = 0; i <= 5; i++)
  {
    byte val = EEPROM.read(EEPROMstartAddr+3);   
    CardUIDeEPROMread[ARRAYindexUIDcard] = (CardUIDeEPROMread[ARRAYindexUIDcard] << 8) | val; 
    val = EEPROM.read(EEPROMstartAddr+2); 
    CardUIDeEPROMread[ARRAYindexUIDcard] = (CardUIDeEPROMread[ARRAYindexUIDcard] << 8) | val; 
    val = EEPROM.read(EEPROMstartAddr+1); // увеличиваем EEPROMstartAddr на 1.
    CardUIDeEPROMread[ARRAYindexUIDcard] = (CardUIDeEPROMread[ARRAYindexUIDcard] << 8) | val; 
    val = EEPROM.read(EEPROMstartAddr); 
    CardUIDeEPROMread[ARRAYindexUIDcard] = (CardUIDeEPROMread[ARRAYindexUIDcard] << 8) | val;

    ARRAYindexUIDcard++; // увеличиваем на 1.
    EEPROMstartAddr +=5; // увеличиваем на 5.
  }

  ARRAYindexUIDcard = 0;
  EEPROMstartAddr = 0; 
  uidDec = 0;
  LockSwitch = 0;
 // DisplayWAiT_CARD();        
}


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



// Делаем функцию, заставка дисплея.
//void DisplayWAiT_CARD()

 // display.clearDisplay(); // Clear the buffer. / Очистить буфер. 
 // display.setTextColor(WHITE); // Цвет текста.
  //display.setTextSize(4); // Размер текста (4).
  //display.setCursor(0,0);
  //display.println("WAIT");
 // display.setCursor(25,35);
  //display.println("CARD");
 // display.display();


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

// Делаем функцию, для выполнения любых действий, в зависимости от "Card UID" поднесённой карты.
void CommandsCARD()
{
 // display.print("Hi "); // Выводим на дисплей "привет".

  // В "ARRAYindexUIDcard" будет временно хранится номер индекса массива, совпавшего с поднесенной Card-UID.
  // Например, если поднесённый Card-UID совпал, с записанным  Card-UID в ячейке № 0 / индексом массива ARRAYindexUIDcard № 0. 
  if (ARRAYindexUIDcard == 0)
  {
   // display.println("Dmitry"); // Выводим на дисплей "Dmitry". 
    // ! Здесь, можно дописать любые другие действия. 
     digitalWrite(PiezoPin, HIGH);
     digitalWrite(zPin, HIGH);   // turn the LED on (HIGH is the voltage level)
     delay(5000);               // wait for a second
     digitalWrite(PiezoPin, LOW);  
     digitalWrite(zPin, LOW);   // turn the LED off by making the voltage LOW
     delay(10);               // wait for a second
}  

  else if (ARRAYindexUIDcard == 1) // Если Card-UID получен из ячейки № 1 / индекс массива № 1. 
  {
   // display.println("Sergey"); 
    // ! Здесь, можно дописать любые другие действия. 
     digitalWrite(PiezoPin, HIGH);
     digitalWrite(zPin, HIGH);   // turn the LED on (HIGH is the voltage level)
     delay(5000);               // wait for a second
     digitalWrite(PiezoPin, LOW);  
     digitalWrite(zPin, LOW);   // turn the LED off by making the voltage LOW
     delay(10);               // wait for a second
  }

  else if (ARRAYindexUIDcard == 2) // Если Card-UID получен из ячейки № 2 / индекс массива № 2.
  {
   // display.println("Peter");
    // ! Здесь, можно дописать любые другие действия. 
    digitalWrite(PiezoPin, HIGH); 
  digitalWrite(zPin, HIGH);   // turn the LED on (HIGH is the voltage level)
    delay(5000);               // wait for a second
    digitalWrite(PiezoPin, LOW);  
    digitalWrite(zPin, LOW);  // turn the LED off by making the voltage LOW
    delay(10);               // wait for a second
  }

  else if (ARRAYindexUIDcard == 3) 
  {
   digitalWrite(PiezoPin, HIGH);   
   digitalWrite(zPin, HIGH); // turn the LED on (HIGH is the voltage level)
  delay(5000);               // wait for a second
  digitalWrite(PiezoPin, LOW);  
  digitalWrite(zPin, LOW);  // turn the LED off by making the voltage LOW
  delay(10);               // wait for a second
    // display.println("Vasily");
  }
  else if (ARRAYindexUIDcard == 4) 
  {
   digitalWrite(PiezoPin, HIGH); 
  digitalWrite(zPin, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(5000);               // wait for a second
  digitalWrite(PiezoPin, LOW);  
  digitalWrite(zPin, LOW);  // turn the LED off by making the voltage LOW
  delay(10);               // wait for a second
    // display.println("Vasily");
  }
  else if (ARRAYindexUIDcard == 5) 
  {
  digitalWrite(PiezoPin, HIGH);   
  digitalWrite(zPin, HIGH); // turn the LED on (HIGH is the voltage level)
  delay(5000);               // wait for a second
  digitalWrite(PiezoPin, LOW);  
  digitalWrite(zPin, LOW);  // turn the LED off by making the voltage LOW
  delay(10);               // wait for a second
    // display.println("Vasily");
  }
  
  
  
  
  
  
  
  
  
  //....................... 
  else if (ARRAYindexUIDcard == 49) 
  {
    //display.println("OSIPOV");
  }
  //---
  // Далее, самостоятельно пропишите ножное количество "else if (ARRAYindexUIDcard == ", максимум 50 условий.

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

  //display.setCursor(0,20); // Спускаем курсор на 20 Pixel.
//  display.println(CardUIDeEPROMread[ARRAYindexUIDcard]); // Выводим на дисплей обнаруженный Card-UID.
//  display.setCursor(40,40); // Спускаем курсор на 40 Pixel.
 // display.setTextSize(3); // увеличиваем шрифт.
 // display.println(ARRAYindexUIDcard); // Выводим на дисплей  № индекса массива / ячейки, где хранился обнаруженный Card-UID
 // display.display(); // Чтобы сделать символы видимыми на дисплее !.
  // -------------

  // Подаём звуковой сигнал через PiezoPin, 
  // количество раз зависит от  № индекса массива / ячейки, где хранился обнаруженный Card-UID.
  for(int i = 0; i <= ARRAYindexUIDcard; i++)delay(20),digitalWrite(PiezoPin, HIGH),delay(20),digitalWrite(PiezoPin, LOW);
  delay(1); // Дёргаем микроконтроллер.
}





















 

b707
Offline
Зарегистрирован: 26.05.2017

есть мнение, что код отвратительный и хвастать им не стоит

satelit 2
Offline
Зарегистрирован: 04.12.2016

я рабочий код дмитрия скинул, у меня работает. о чем дальше 

satelit 2
Offline
Зарегистрирован: 04.12.2016

извиняюсь за грубость, видать после пива сидел 

коды коментировать не компетентен, новичек. но мне понравился данный девайс, залил в про мини 168 3.3 и забыл. карты перезаписываются при неоходимости и сохраняются в еепром. без перепрошивки без программатора. собрал и забыл. почти. исполнительное реле не могу собрать корректно. после 20 30 цикла летят ключи открывающие реле. как нидудь разберу, скорее всего защитный диод наоборот припоял