Smart Eye Gebaseer op DWIN Sirkelskerm

——Van DWIN-ontwikkelaarsforum

Die oopbronprojek vir DWIN-ontwikkelaarsforum wat hierdie keer vir almal aanbeveel word, is 'n baie interessante roetine om die beweging van menslike oë te simuleer.Die ingenieur het verskeie menslike oog-prentmateriaal gebruik om funksies soos oogbalbeweging, knip, gesigherkenning en volg te realiseer.

Inleiding tot oopbronoplossings:

1. UI-beeldmateriaal

Redakteur se nota: DWIN-slimskerm is gebaseer op prente om UI-ontwikkeling te voltooi, wat maklik verskillende vertooneffekte kan realiseer.

dytrgf (1)

2. Interface ontwikkeling

Dit is relatief eenvoudig om die koppelvlak deur DGUS-sagteware te ontwikkel, en slegs twee grafiese kontroles is nodig.In hierdie roetine het die ingenieur 'n 2,1-duim ronde slimskerm gekies.

dytrgf (2)

3. Realiseer blink animasie

Laat die prente van die ooglede om die beurt met tussenposes vertoon word:

//Blink animasie

void blink_animat(void)

{

if(blink_vlag == 0)

{

blink_cnt++;

if(blink_cnt >= 4)

{

blink_vlag = 1;

}

}

anders

{

blink_cnt–;

if(blink_cnt <= 0)

{

blink_vlag = 0;

}

}

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

}

void blink_run()

{

statiese u32 run_timer_cnt = 0;

run_timer_cnt++;

if (run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Vertraag_ms(30);

blink_animat();

Vertraag_ms(30);

blink_animat();

Vertraag_ms(30);

blink_animat();

Vertraag_ms(30);

blink_animat();

Vertraag_ms(30);

blink_animat();

Vertraag_ms(30);

blink_animat();

Vertraag_ms(30);

blink_animat();

Vertraag_ms(30);

}

}

4. Besef die oogballe lyk natuurlik links en regs.

Dit is soortgelyk aan flikker, maar dit moet die tyd van die kristal ossillator vergelyk om die oogbeweging te beheer.Na baie keer van ontfouting het die ingenieur die volgende stel kodes ontwerp.

//Oogappel-animasie

void eyeball_animat(void)

{

eyeball_timer_cnt++;

if (oogbal_timer_cnt < 50)

{

oogappel_cnt = 20;

}

anders as (oogbal_timer_cnt < 51)

{

oogappel_cnt = 50;

}

anders as (oogbal_timer_cnt < 52)

{

oogappel_cnt = 80;

}

anders as (oogbal_timer_cnt < 53)

{

oogappel_cnt = 94;

}

anders as (oogbal_timer_cnt < 103)

{

oogappel_cnt = 94;

}

anders as (oogbal_timer_cnt < 104)

{

oogappel_cnt = 80;

}

anders as (oogbal_timer_cnt < 105)

{

oogappel_cnt = 50;

}

anders as (oogbal_timer_cnt < 106)

{

oogappel_cnt = 20;

}

anders as (oogbal_timer_cnt < 107)

{

oogappel_cnt = -10;

}

anders as (oogbal_timer_cnt < 108)

{

oogappel_cnt = -40;

}

anders as (oogbal_timer_cnt < 158)

{

oogappel_cnt = -54;

}

anders as (oogbal_timer_cnt < 159)

{

oogappel_cnt = -40;

}

anders as (oogbal_timer_cnt < 160)

{

oogappel_cnt = -10;

}

anders as (oogbal_timer_cnt < 161)

{

oogappel_cnt = 20;

eyeball_timer_cnt = 0;

}

//Beweeg links en regs

// if(oogappel_vlag == 0)

// {

// oogappel_cnt++;

// if(oogappel_cnt >= 94)

// {

// oogappel_vlag = 1;

// }

// }

// anders

// {

// oogappel_cnt–;

// if(oogappel_cnt <= -54)

// {

// oogappel_vlag = 0;

// }

// }

if(oogappel_cnt >= 0)

{

oogappel_pos[0] = 0×00;

oogappel_pos[1] = oogappel_cnt;

}

anders

{

oogappel_pos[0] = 0xFF;

oogappel_pos[1] = (oogappel_cnt & 0xFF);

}

skryf_dgus_vp(0×3111, (u8 *)&oogbal_pos, 2);

}

void eyeball_run()

{

statiese u32 run_timer_cnt = 0;

run_timer_cnt++;

if (run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Voeg ESP32-gesigherkenning by om die beweging van oë wat die gesig volg, te besef.

Die verwerkingsmetode hier is dat wanneer die gesig opgespoor word, die oë nie vanself beweeg nie, en 'n veranderlike word gedefinieer om in die while-lus te verhoog.Wanneer die inkrement 'n sekere waarde bereik, sal die oogballe vanself beweeg.Wanneer die reekspoort data ontvang, sal hierdie veranderlike uitgevee word, en dan beweeg slegs die oë volgens die posisie van die gesig.Die hoofkode is soos volg:

if (rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

anders

{

eyeball_run();

}

eksterne u32 rec_data_timer_cnt;

eksterne 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(Type_Communication==1)

Beskryf_8283(st);

#elif(Type_Communication==2)

Beskryf_Modbus(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Pos tyd: Jun-26-2023