Отговори на тема  [ 8 мнения ] 
Arduino как се прави база данни и четене 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Юни 27, 2017 8:03 am
Мнения: 24
Местоположение: Варна
Мнение Arduino как се прави база данни и четене
Здравейте,
написах един код за RFID четец за врата,който си работи нормално.Но не знам как може да се направи една променлива от базата с данни на UID и после да се чете.Не знам дали се изразих правилно.Написах го по "бабешки" начин и не ми харесва много как изглежда.

Код:
byte Key_1_UID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
byte Key_2_UID[4] = {0x35, 0x21, 0x8B, 0x17};
byte Key_3_UID[4] = {0x20, 0x02, 0x7B, 0x25};
byte Key_4_UID[4] = {0x3F, 0xF1, 0x4B, 0x15};


може ли това да се направи в една променлива?

и може ли това с четенето да е по-кратко?

Код:
if (rfid.uid.uidByte[0] == Key_1_UID[0] &&
          rfid.uid.uidByte[1] == Key_1_UID[1] &&
          rfid.uid.uidByte[2] == Key_1_UID[2] &&
          rfid.uid.uidByte[3] == Key_1_UID[3] ) {
       
        digitalWrite(RELAY_DOOR, HIGH);  // unlock the door for 2 seconds
        delay(2000);
        digitalWrite(RELAY_DOOR, LOW);   // lock the door
      }
      else
      if (rfid.uid.uidByte[0] == Key_2_UID[0] &&
          rfid.uid.uidByte[1] == Key_2_UID[1] &&
          rfid.uid.uidByte[2] == Key_2_UID[2] &&
          rfid.uid.uidByte[3] == Key_2_UID[3] ) {
       
        digitalWrite(RELAY_DOOR, HIGH);  // unlock the door for 2 seconds
        delay(2000);
        digitalWrite(RELAY_DOOR, LOW);   // lock the door
      }
       else
      if (rfid.uid.uidByte[0] == Key_3_UID[0] &&
          rfid.uid.uidByte[1] == Key_3_UID[1] &&
          rfid.uid.uidByte[2] == Key_3_UID[2] &&
          rfid.uid.uidByte[3] == Key_3_UID[3] ) {
        ;
        digitalWrite(RELAY_DOOR, HIGH);  // unlock the door for 2 seconds
        delay(2000);
        digitalWrite(RELAY_DOOR, LOW);   // lock the door
      }
       else
      if (rfid.uid.uidByte[0] == Key_4_UID[0] &&
          rfid.uid.uidByte[1] == Key_4_UID[1] &&
          rfid.uid.uidByte[2] == Key_4_UID[2] &&
          rfid.uid.uidByte[3] == Key_4_UID[3] ) {
       
        digitalWrite(RELAY_DOOR, HIGH);  // unlock the door for 2 seconds
        delay(2000);
        digitalWrite(RELAY_DOOR, LOW);   // lock the door
      }


дано ме разберете какво питам.


Пет Май 07, 2021 10:15 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Вто Окт 25, 2005 10:54 am
Мнения: 896
Мнение Re: Arduino как се прави база данни и четене
Сложи ключевете в двумерен масив и после в цикъл един по един ги проверявай с memcmp(), нещо от сорта:

#define KEYS_NUM 4
#define KEY_LEN 4

byte keys[KEYS_NUM][KEY_LEN] =
{
{0x3A, 0xC9, 0x6A, 0xCB},
{0x35, 0x21, 0x8B, 0x17},
...
}

for (i = 0; i < KEYS_NUM; i++)
{
if (!memcmp(keys[i], rfid.uid.uidByte, KEY_LEN))
{
digitalWrite(RELAY_DOOR, HIGH); // unlock the door for 2 seconds
delay(2000);
digitalWrite(RELAY_DOOR, LOW); // lock the door
}
}

Ама най добре да не ги хардкодваш в кода ами да ги записваш в епрома с някакъв мастър ключ... аз така направих преди 10 години за входа на блока. Така няма нужда да ребилдваш и препрограмираш ако искаш да добавиш нов ключ.


Пет Май 07, 2021 11:51 am
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Юни 27, 2017 8:03 am
Мнения: 24
Местоположение: Варна
Мнение Re: Arduino как се прави база данни и четене
Няма да се добавят или махат ключове,тези четирите ще са само.Благодаря ти.


Пет Май 07, 2021 12:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: Arduino как се прави база данни и четене
4 байта е 32 битов инт

uint32_t data;
rfid_read( &data, 4);

for( int i = 0; i < KEY_NUMBERS; i++ )
if ( data == key[i] ) ... ok, break;

_________________
main[-1u]={1};


Пет Май 07, 2021 2:58 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Вто Окт 25, 2005 10:54 am
Мнения: 896
Мнение Re: Arduino как се прави база данни и четене
TheWizard написа:
4 байта е 32 битов инт

+1 Това още повече опростява кода, т.е. ключовете може да си ги сложиш в едномерен uint32 масив с 4 елемента и вместо memcmp() да използваш "==".


Пет Май 07, 2021 3:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12764
Местоположение: София
Мнение Re: Arduino как се прави база данни и четене
koko76bj написа:
Няма да се добавят или махат ключове,тези четирите ще са само.Благодаря ти.

Хубаво е да могат да се подменят чипове, например ако загубиш или се повреди някой.


Пет Май 07, 2021 4:44 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Юни 27, 2017 8:03 am
Мнения: 24
Местоположение: Варна
Мнение Re: Arduino как се прави база данни и четене
TheWizard написа:
4 байта е 32 битов инт

uint32_t data;
rfid_read( &data, 4);

for( int i = 0; i < KEY_NUMBERS; i++ )
if ( data == key[i] ) ... ok, break;


t_i_t_o написа:
ключовете може да си ги сложиш в едномерен uint32 масив с 4 елемента и вместо memcmp() да използваш "==".


Това не го разбрах.Къде се прави масива?
Извинявам се че задавам такива въпроси но още имам да уча,не съм на вашето ниво.


Пет Май 07, 2021 5:25 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: Arduino как се прави база данни и четене
Код:
const uint32_t key[4] = {
   0x11223344, // ключ 1
   0x22334455, // ключ 2
   0x33445566,
   0x44556677,
}

int data;
rfid_read( &data, 4); // сигурно имаш функция за четене на масив данни от ерфида
printf("%X\n", data); // принт да вземеш числото за кей масива

_________________
main[-1u]={1};


Пет Май 07, 2021 5:46 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 8 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни