Smart Eye DWIN Dairəvi Ekranına əsaslanır

——DWIN Developer Forumundan

Bu dəfə hər kəs üçün tövsiyə olunan DWIN developer forumu açıq mənbə layihəsi insan gözlərinin hərəkətini simulyasiya etmək üçün çox maraqlı bir rutindir.Mühəndis göz almasının hərəkəti, yanıb-sönmə, üz tanıma və izləmə kimi funksiyaları həyata keçirmək üçün bir neçə insan gözünün təsviri materialından istifadə edib.

Açıq mənbə həllərinə giriş:

1. UI təsvir materialı

Redaktorun qeydi: DWIN smart ekranı müxtəlif ekran effektlərini asanlıqla həyata keçirə bilən UI inkişafını tamamlamaq üçün şəkillərə əsaslanır.

dytrgf (1)

2. İnterfeys inkişafı

DGUS proqramı vasitəsilə interfeysi inkişaf etdirmək nisbətən sadədir və yalnız iki qrafik nəzarət tələb olunur.Bu rejimdə mühəndis 2,1 düymlük yuvarlaq smart ekran seçdi.

dytrgf (2)

3. Göz qırpma animasiyasını həyata keçirin

Göz qapaqlarının şəkilləri fasilələrlə növbə ilə göstərilsin:

//Qırpma animasiyası

void blink_animat(boş)

{

əgər(blink_bayraq == 0)

{

blink_cnt++;

əgər (blink_cnt >= 4)

{

yanıb-sönən_bayraq = 1;

}

}

başqa

{

blink_cnt–;

if(blink_cnt <= 0)

{

yanıb-sönən_bayraq = 0;

}

}

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

}

void blink_run()

{

statik u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Gecikmə_ms(30);

blink_animat();

Gecikmə_ms(30);

blink_animat();

Gecikmə_ms(30);

blink_animat();

Gecikmə_ms(30);

blink_animat();

Gecikmə_ms(30);

blink_animat();

Gecikmə_ms(30);

blink_animat();

Gecikmə_ms(30);

blink_animat();

Gecikmə_ms(30);

}

}

4. Göz almalarının təbii şəkildə sağa və sola baxdığını anlayın.

Bu, yanıb-sönməyə bənzəyir, lakin göz hərəkətini idarə etmək üçün kristal osilatorun vaxtını müqayisə etmək lazımdır.Dəfələrlə düzəlişlərdən sonra mühəndis aşağıdakı kodlar dəstini hazırladı.

//Göz alma animasiyası

boş göz bəbəyi_animasiya(boş)

{

eyeball_timer_cnt++;

əgər(eyeball_timer_cnt < 50)

{

eyeball_cnt = 20;

}

başqa əgər (göz almasının_taymer_cnt < 51)

{

eyeball_cnt = 50;

}

əgər başqa (eyeball_timer_cnt < 52)

{

eyeball_cnt = 80;

}

başqa əgər (göz almasının_taymer_cnt < 53)

{

eyeball_cnt = 94;

}

əgər başqa (eyeball_timer_cnt < 103)

{

eyeball_cnt = 94;

}

başqa əgər (göz almasının_taymer_cnt < 104)

{

eyeball_cnt = 80;

}

başqa əgər (göz almasının_taymer_cnt < 105)

{

eyeball_cnt = 50;

}

başqa əgər (göz almasının_taymer_cnt < 106)

{

eyeball_cnt = 20;

}

başqa əgər (göz almasının_taymer_cnt < 107)

{

eyeball_cnt = -10;

}

başqa əgər (göz almasının_taymer_cnt < 108)

{

eyeball_cnt = -40;

}

başqa əgər (göz almasının_taymer_cnt < 158)

{

eyeball_cnt = -54;

}

başqa əgər (göz almasının_taymer_cnt < 159)

{

eyeball_cnt = -40;

}

başqa əgər (göz almasının_taymer_cnt < 160)

{

eyeball_cnt = -10;

}

başqa əgər (göz almasının_taymer_cnt < 161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

//Sağa və sola hərəkət edin

// əgər (göz bəbəyi_bayraq == 0)

// {

// eyeball_cnt++;

// əgər(eyeball_cnt >= 94)

// {

// göz almasının_bayrağı = 1;

// }

// }

// başqa

// {

// eyeball_cnt–;

// əgər(eyeball_cnt <= -54)

// {

// göz almasının_bayrağı = 0;

// }

// }

əgər (göz almasının_cnt >= 0)

{

eyeball_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

başqa

{

eyeball_pos[0] = 0xFF;

eyeball_pos[1] = (göz almasının_cnt & 0xFF);

}

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

}

boş göz qapağı_run()

{

statik u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Üzdən sonra gözlərin hərəkətini həyata keçirmək üçün ESP32 üz tanıma əlavə edin.

Burada emal üsulu ondan ibarətdir ki, üz aşkar edildikdə, gözlər öz-özünə hərəkət etmir və while döngəsində artım üçün dəyişən müəyyən edilir.Artım müəyyən bir dəyərə çatdıqda, göz bəbəkləri öz-özünə hərəkət edəcəkdir.Serial port məlumat aldıqda, bu dəyişən təmizlənəcək və sonra yalnız üzün mövqeyinə uyğun olaraq gözləri hərəkət etdirin.Əsas kod aşağıdakı kimidir:

əgər (rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

başqa

{

eyeball_run();

}

extern u32 rec_data_timer_cnt;

extern u16 eyeball_timer_cnt;

etibarsız Rabitə_CMD(u8 st)

{

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

{

rec_data_timer_cnt = 0;

eyeball_timer_cnt = 0;

#if(Növ_Rabitə==1)

Təsvir_8283(st);

#elif(Növ_Rabitə==2)

Təsvir_Modbus(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Göndərmə vaxtı: 26 iyun 2023-cü il