Syri i zgjuar i bazuar në ekranin rrethor DWIN

——Nga Forumi i Zhvilluesve DWIN

Projekti me kod të hapur të forumit të zhvilluesve DWIN i rekomanduar për të gjithë këtë herë është një rutinë shumë interesante për simulimin e lëvizjes së syve të njeriut.Inxhinieri përdori disa materiale për fotografimin e syve të njeriut për të realizuar funksione të tilla si lëvizja e kokës së syrit, pulsimi, njohja e fytyrës dhe ndjekja.

Hyrje në zgjidhjet me burim të hapur:

1. Materiali i imazhit të UI

Shënim i redaktorit: Ekrani inteligjent DWIN bazohet në foto për të përfunduar zhvillimin e ndërfaqes së përdoruesit, i cili mund të realizojë lehtësisht efekte të ndryshme të ekranit.

dytrgf (1)

2. Zhvillimi i ndërfaqes

Është relativisht e thjeshtë për të zhvilluar ndërfaqen përmes softuerit DGUS dhe nevojiten vetëm dy kontrolle grafike.Në këtë rutinë, inxhinieri zgjodhi një ekran inteligjent të rrumbullakët 2.1 inç.

dytrgf (2)

3. Realizoni animacionin e ndezjes

Lërini fotografitë e qepallave të shfaqen me radhë në intervale:

//Animacioni Blink

void blink_animat(void)

{

nëse (flamuri_blink == 0)

{

blink_cnt++;

nëse (blink_cnt >= 4)

{

blink_flamur = 1;

}

}

tjetër

{

blink_cnt–;

if (blink_cnt <= 0)

{

ndezje_flamuri = 0;

}

}

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

}

i pavlefshëm blink_run()

{

static u32 run_timer_cnt = 0;

run_timer_cnt++;

if (run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Vonesa_ms(30);

blink_animat();

Vonesa_ms(30);

blink_animat();

Vonesa_ms(30);

blink_animat();

Vonesa_ms(30);

blink_animat();

Vonesa_ms(30);

blink_animat();

Vonesa_ms(30);

blink_animat();

Vonesa_ms(30);

blink_animat();

Vonesa_ms(30);

}

}

4. Kuptoni që kokërdhat e syrit duken majtas dhe djathtas natyrshëm.

Kjo është e ngjashme me vezullimin, por duhet të krahasohet koha e oshilatorit kristal për të kontrolluar lëvizjen e syve.Pas shumë herë korrigjimi, inxhinieri krijoi grupin e mëposhtëm të kodeve.

//Animacion i kokës së syrit

zbrazëti kokrra e syrit_animat(i zbrazët)

{

syri_timer_cnt++;

nëse (kohëmatësi_syri_cnt < 50)

{

kokrra e syrit_cnt = 20;

}

ndryshe if(bobël_kohës_cnt < 51)

{

kokrra e syrit_cnt = 50;

}

ndryshe if(bobël_kohës_syri_cnt < 52)

{

kokrra e syrit_cnt = 80;

}

ndryshe if(eyeball_timer_cnt < 53)

{

kokrra e syrit_cnt = 94;

}

ndryshe if(bobël_kohës_syri_cnt < 103)

{

kokrra e syrit_cnt = 94;

}

ndryshe if(syri_timer_cnt < 104)

{

kokrra e syrit_cnt = 80;

}

tjeter if(eyeball_timer_cnt < 105)

{

kokrra e syrit_cnt = 50;

}

ndryshe if(bobël_kohës_syri_cnt < 106)

{

kokrra e syrit_cnt = 20;

}

ndryshe if(bobël_kohës_syri_cnt < 107)

{

kokrra e syrit_cnt = -10;

}

ndryshe if(syri_timer_cnt < 108)

{

kokrra e syrit_cnt = -40;

}

ndryshe if(bobël_kohës_syri_cnt < 158)

{

kokrra e syrit_cnt = -54;

}

ndryshe if(bobël_kohës_syri_cnt < 159)

{

kokrra e syrit_cnt = -40;

}

tjetër if(bobël_kohës_syri_cnt < 160)

{

kokrra e syrit_cnt = -10;

}

ndryshe if(bobël_kohës_syri_cnt < 161)

{

kokrra e syrit_cnt = 20;

Kohëmatësi_syri_cnt = 0;

}

//Lëvizni majtas dhe djathtas

// nëse(flamuri_qelbës së syrit == 0)

// {

// syri_cnt++;

// if(bobël_eyes_cnt >= 94)

// {

// syri_flamur = 1;

// }

// }

// tjetër

// {

// syri_cnt–;

// if(bobël_cnt <= -54)

// {

// syri_flamur = 0;

// }

// }

nëse (bobël të syrit_cnt >= 0)

{

kokrra e syrit_pos[0] = 0×00;

kokrra e syrit_pos[1] = kokërr syri_cnt;

}

tjetër

{

kokrra e syrit_pos[0] = 0xFF;

kokshi i syrit_pos[1] = (bobëza e syrit_cnt & 0xFF);

}

shkruani_dgus_vp(0×3111, (u8 *)& syri_pos, 2);

}

zbrazëti kokrra e syrit_run()

{

static u32 run_timer_cnt = 0;

run_timer_cnt++;

if (run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

kokrra e syrit_animat();

}

}

5. Shtoni njohjen e fytyrës ESP32 për të realizuar lëvizjen e syve pas fytyrës.

Metoda e përpunimit këtu është që kur zbulohet fytyra, sytë nuk lëvizin vetvetiu dhe përcaktohet një variabël që rritet në ciklin while.Kur rritja arrin një vlerë të caktuar, kokërdhat e syrit do të lëvizin vetë.Kur porta serike merr të dhëna, kjo ndryshore do të pastrohet dhe më pas do të lëvizë sytë vetëm sipas pozicionit të fytyrës.Kodi kryesor është si më poshtë:

if (rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

tjetër

{

kokë_syri_run();

}

extern u32 rec_data_timer_cnt;

extern u16 eyeball_timer_cnt;

Void Communication_CMD(u8 st)

{

nëse ((uart[st].Rx_F==1 )&&(uart[st].Rx_T==0))

{

rec_data_timer_cnt = 0;

Kohëmatësi_syri_cnt = 0;

#if(Lloji_Komunikimi==1)

Përshkruani_8283(st);

#elif (Tipi_Komunikimi==2)

Describe_Modbus(st);

#përfundim

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Koha e postimit: Qershor-26-2023