DWIN tegelek ekrany esasynda akylly göz

—— DWIN dörediji forumyndan

Bu gezek hemmeler üçin maslahat berilýän DWIN dörediji forum açyk çeşme taslamasy, adam gözleriniň hereketini simulirlemek üçin gaty gyzykly bir iş.Inerener, gözüň hereketi, ýalpyldawuk, ýüzi tanamak we yzarlamak ýaly funksiýalary amala aşyrmak üçin birnäçe adam göz surat materiallaryny ulandy.

Açyk çeşme çözgütleri bilen tanyşlyk:

1. UI şekil materialy

Redaktoryň belligi: DWIN akylly ekrany, dürli displeý effektlerini aňsatlyk bilen amala aşyryp bilýän UI ösüşini tamamlamak üçin suratlara esaslanýar.

dytrgf (1)

2. Interfeýsiň ösüşi

DGUS programma üpjünçiligi arkaly interfeýsi ösdürmek has ýönekeý we diňe iki grafiki dolandyryş gerek.Inerener bu işde 2,1 dýuým tegelek akylly ekrany saýlady.

dytrgf (2)

3. Göz gamaşdyryjy animasiýany amala aşyryň

Göz gabaklarynyň suratlary öz gezeginde görkezilsin:

// Blink animasiýa

boşluk blink_animat (boş)

{

eger (blink_flag == 0)

{

blink_cnt ++;

eger (blink_cnt> = 4)

{

blink_flag = 1;

}

}

başga

{

blink_cnt–;

eger (blink_cnt <= 0)

{

blink_flag = 0;

}

}

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

}

boş blink_run ()

{

statik u32 run_timer_cnt = 0;

run_timer_cnt ++;

eger (run_timer_cnt> = 2000000)

{

run_timer_cnt = 0;

blink_animat ();

Gijä galmak (30);

blink_animat ();

Gijä galmak (30);

blink_animat ();

Gijä galmak (30);

blink_animat ();

Gijä galmak (30);

blink_animat ();

Gijä galmak (30);

blink_animat ();

Gijä galmak (30);

blink_animat ();

Gijä galmak (30);

blink_animat ();

Gijä galmak (30);

}

}

4. Göz gabaklarynyň çep we saga tebigy görünýändigine göz ýetiriň.

Bu ýalpyldawuklyga meňzeýär, ýöne gözüň hereketine gözegçilik etmek üçin kristal yrgyldamanyň wagtyny deňeşdirmeli.Ençeme gezek düzedişden soň inerener aşakdaky kodlar toplumyny düzdi.

// Göz aýagy animasiýasy

boş göz_animat (boş)

{

eyeball_timer_cnt ++;

eger (eyeball_timer_cnt <50)

{

eyeball_cnt = 20;

}

başgaça bolsa (eyeball_timer_cnt <51)

{

eyeball_cnt = 50;

}

başgaça bolsa (eyeball_timer_cnt <52)

{

eyeball_cnt = 80;

}

başgaça bolsa (eyeball_timer_cnt <53)

{

eyeball_cnt = 94;

}

başgaça bolsa (eyeball_timer_cnt <103)

{

eyeball_cnt = 94;

}

başgaça bolsa (eyeball_timer_cnt <104)

{

eyeball_cnt = 80;

}

başgaça bolsa (eyeball_timer_cnt <105)

{

eyeball_cnt = 50;

}

başgaça bolsa (eyeball_timer_cnt <106)

{

eyeball_cnt = 20;

}

başgaça bolsa (eyeball_timer_cnt <107)

{

eyeball_cnt = -10;

}

başgaça bolsa (eyeball_timer_cnt <108)

{

eyeball_cnt = -40;

}

başgaça bolsa (eyeball_timer_cnt <158)

{

eyeball_cnt = -54;

}

başgaça bolsa (eyeball_timer_cnt <159)

{

eyeball_cnt = -40;

}

başgaça bolsa (eyeball_timer_cnt <160)

{

eyeball_cnt = -10;

}

başgaça bolsa (eyeball_timer_cnt <161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

// Çepe we saga süýşüriň

// eger (eyeball_flag == 0)

// {

// eyeball_cnt ++;

// eger (eyeball_cnt> = 94)

// {

// eyeball_flag = 1;

//}

//}

// başga

// {

// eyeball_cnt–;

// eger (eyeball_cnt <= -54)

// {

// eyeball_flag = 0;

//}

//}

eger (eyeball_cnt> = 0)

{

eyeball_pos [0] = 0 × 00;

eyeball_pos [1] = eyeball_cnt;

}

başga

{

eyeball_pos [0] = 0xFF;

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

}

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

}

boş eyeball_run ()

{

statik u32 run_timer_cnt = 0;

run_timer_cnt ++;

eger (run_timer_cnt> = 20000)

{

run_timer_cnt = 0;

eyeball_animat ();

}

}

5. Gözüň ýüzüň hereketine düşünmek üçin ESP32 ýüz tanamak goşuň.

Bu ýerde gaýtadan işlemegiň usuly, ýüz ýüze çykarylanda gözleriň öz-özünden hereket etmezligi we şol bir wagtyň özünde artmak üçin üýtgeýjiniň kesgitlenmegi.Artdyryş belli bir gymmata ýetende, gabaklar özleri hereket ederler.Seriýa porty maglumat alanda, bu üýtgeýji arassalanar we gözleri diňe ýüzüň ýagdaýyna görä herekete getirer.Esasy kod aşakdaky ýaly:

eger (rec_data_timer_cnt <1000000)

{

rec_data_timer_cnt ++;

}

başga

{

eyeball_run ();

}

daşarky u32 rec_data_timer_cnt;

daşarky u16 eyeball_timer_cnt;

boş aragatnaşyk_CMD (u8 st)

{

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

{

rec_data_timer_cnt = 0;

eyeball_timer_cnt = 0;

#if (Type_Communication == 1)

Düşündiriş_8283 (st)

#elif (Type_Communication == 2)

Düşündiriş_Modbus (st)

#endif

uart [st] .Rx_F = 0;

uart [st] .Rx_Num = 0;

}

}


Iş wagty: Iýun-26-2023