Smart Eye DWIN dumaloq ekraniga asoslangan

——DWIN dasturchilar forumidan

Bu safar hamma uchun tavsiya etilgan DWIN ishlab chiquvchilar forumi ochiq manba loyihasi inson ko'zlari harakatini taqlid qilish uchun juda qiziqarli tartibdir.Muhandis ko'z olmasining harakati, miltillash, yuzni tanib olish va ergashish kabi funktsiyalarni amalga oshirish uchun bir nechta inson ko'zining tasvir materiallaridan foydalangan.

Ochiq kodli yechimlarga kirish:

1. UI tasvir materiali

Tahrirlovchining eslatmasi: DWIN aqlli ekrani turli xil displey effektlarini osongina amalga oshirishi mumkin bo'lgan UI rivojlanishini yakunlash uchun rasmlarga asoslangan.

dytrgf (1)

2. Interfeysni ishlab chiqish

DGUS dasturi orqali interfeysni ishlab chiqish nisbatan sodda va faqat ikkita grafik boshqaruv kerak.Ushbu tartibda muhandis 2,1 dyuymli dumaloq smart-ekranni tanladi.

dytrgf (2)

3. Miltillovchi animatsiyani amalga oshirish

Ko'z qovoqlarining rasmlari navbat bilan ko'rsatilsin:

// Miltillovchi animatsiya

void blink_animat(void)

{

agar (blink_flag == 0)

{

blink_cnt++;

agar(blink_cnt >= 4)

{

miltillovchi_bayroq = 1;

}

}

boshqa

{

blink_cnt–;

agar(blink_cnt <= 0)

{

miltillovchi_bayroq = 0;

}

}

write_dgus_vp(0×3000, (u8 *)&blink_cnt, 2);

}

void blink_run()

{

statik u32 run_timer_cnt = 0;

run_timer_cnt++;

agar (run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Kechikish_ms(30);

blink_animat();

Kechikish_ms(30);

blink_animat();

Kechikish_ms(30);

blink_animat();

Kechikish_ms(30);

blink_animat();

Kechikish_ms(30);

blink_animat();

Kechikish_ms(30);

blink_animat();

Kechikish_ms(30);

blink_animat();

Kechikish_ms(30);

}

}

4. Ko'z olmalarining tabiiy ravishda chapga va o'ngga qarashini tushuning.

Bu miltillovchiga o'xshaydi, lekin ko'z harakatini boshqarish uchun kristall osilator vaqtini solishtirish kerak.Ko'p marta nosozliklarni tuzatishdan so'ng, muhandis quyidagi kodlar to'plamini ishlab chiqdi.

//Ko'z olmasining animatsiyasi

void eyeball_animat(void)

{

eyeball_timer_cnt++;

agar (eyeball_timer_cnt < 50)

{

eyeball_cnt = 20;

}

Aks holda (eyeball_timer_cnt < 51)

{

eyeball_cnt = 50;

}

Aks holda (eyeball_timer_cnt < 52)

{

eyeball_cnt = 80;

}

Aks holda (eyeball_timer_cnt < 53)

{

eyeball_cnt = 94;

}

Aks holda (eyeball_timer_cnt < 103)

{

eyeball_cnt = 94;

}

Aks holda (eyeball_timer_cnt < 104)

{

eyeball_cnt = 80;

}

Aks holda (eyeball_timer_cnt < 105)

{

eyeball_cnt = 50;

}

Aks holda (eyeball_timer_cnt < 106)

{

eyeball_cnt = 20;

}

Aks holda (eyeball_timer_cnt < 107)

{

eyeball_cnt = -10;

}

Aks holda (eyeball_timer_cnt < 108)

{

eyeball_cnt = -40;

}

Aks holda (eyeball_timer_cnt < 158)

{

eyeball_cnt = -54;

}

Aks holda (eyeball_timer_cnt < 159)

{

eyeball_cnt = -40;

}

Aks holda (eyeball_timer_cnt < 160)

{

eyeball_cnt = -10;

}

Aks holda (eyeball_timer_cnt < 161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

// Chapga va o'ngga siljiting

// agar (ko'z olmasi_bayrog'i == 0)

// {

// eyeball_cnt++;

// agar (eyeball_cnt >= 94)

// {

// ko'z olmasi_bayrog'i = 1;

// }

// }

// boshqa

// {

// eyeball_cnt–;

// agar (eyeball_cnt <= -54)

// {

// ko'z olmasi_bayrog'i = 0;

// }

// }

agar (eyeball_cnt >= 0)

{

eyeball_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

boshqa

{

eyeball_pos[0] = 0xFF;

eyeball_pos[1] = (eyeball_cnt & 0xFF);

}

write_dgus_vp(0×3111, (u8 *)&eyeball_pos, 2);

}

bekor eyeball_run()

{

statik u32 run_timer_cnt = 0;

run_timer_cnt++;

agar (run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Yuz ortidan ko'z harakatini amalga oshirish uchun ESP32 yuzni tanishni qo'shing.

Bu erda ishlov berish usuli shundan iboratki, yuz aniqlanganda ko'zlar o'z-o'zidan harakat qilmaydi va o'zgaruvchini while tsiklida oshirish uchun aniqlanadi.O'sish ma'lum bir qiymatga yetganda, ko'z olmalari o'z-o'zidan harakatlanadi.Ketma-ket port ma'lumotlarni qabul qilganda, bu o'zgaruvchi o'chiriladi va keyin faqat ko'zlarni yuzning holatiga qarab harakatlantiring.Asosiy kod quyidagicha:

agar (rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

boshqa

{

eyeball_run();

}

extern u32 rec_data_timer_cnt;

extern u16 eyeball_timer_cnt;

void Communication_CMD(u8 st)

{

if((uart[st].Rx_F==1 )&&(uart[st].Rx_T==0))

{

rec_data_timer_cnt = 0;

eyeball_timer_cnt = 0;

#if(Aloqa_turi==1)

Ta'riflash_8283(st);

#elif(Aloqa_turi==2)

Describe_Modbus(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Xabar vaqti: 26-iyun-2023