Smart Eye DWIN kör alakú képernyőn

——A DWIN fejlesztői fórumról

Az ezúttal mindenkinek ajánlott DWIN fejlesztői fórum nyílt forráskódú projektje egy nagyon érdekes rutin az emberi szem mozgásának szimulálására.A mérnök számos emberi szem képanyagot használt olyan funkciók megvalósítására, mint a szemgolyó mozgása, pislogás, arcfelismerés és követés.

Bevezetés a nyílt forráskódú megoldásokba:

1. UI képanyag

A szerkesztő megjegyzése: A DWIN intelligens képernyő képeken alapul, hogy befejezze a felhasználói felület fejlesztését, amely könnyedén megvalósíthatja a különféle megjelenítési effektusokat.

dytrgf (1)

2. Interfész fejlesztés

Az interfész DGUS szoftverrel történő fejlesztése viszonylag egyszerű, és mindössze két grafikus vezérlőre van szükség.Ebben a rutinban a mérnök egy 2,1 hüvelykes kerek okosképernyőt választott.

dytrgf (2)

3. Valósítsa meg a pislogó animációt

A szemhéjak képei felváltva jelenjenek meg időközönként:

//Pillantás animáció

void blink_animat(void)

{

if(villogó_zászló == 0)

{

blink_cnt++;

if(blink_cnt >= 4)

{

blink_flag = 1;

}

}

más

{

blink_cnt–;

if(blink_cnt <= 0)

{

blink_flag = 0;

}

}

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

}

void blink_run()

{

statikus u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

}

}

4. Vegye észre, hogy a szemgolyó természetesen jobbra és balra néz.

Ez hasonló a pislogáshoz, de össze kell hasonlítani a kristályoszcillátor idejét a szem mozgásának szabályozásához.Sokszori hibakeresés után a mérnök megtervezte a következő kódkészletet.

//Szemgolyó animáció

void eyeball_animat(void)

{

eyeball_timer_cnt++;

if(eyeball_timer_cnt < 50)

{

szemgolyó_cnt = 20;

}

else if(eyeball_timer_cnt < 51)

{

szemgolyó_cnt = 50;

}

else if(eyeball_timer_cnt < 52)

{

szemgolyó_cnt = 80;

}

else if(eyeball_timer_cnt < 53)

{

szemgolyó_cnt = 94;

}

else if(eyeball_timer_cnt < 103)

{

szemgolyó_cnt = 94;

}

else if(eyeball_timer_cnt < 104)

{

szemgolyó_cnt = 80;

}

else if(eyeball_timer_cnt < 105)

{

szemgolyó_cnt = 50;

}

else if(eyeball_timer_cnt < 106)

{

szemgolyó_cnt = 20;

}

else if(eyeball_timer_cnt < 107)

{

eyeball_cnt = -10;

}

else if(eyeball_timer_cnt < 108)

{

szemgolyó_cnt = -40;

}

else if(eyeball_timer_cnt < 158)

{

szemgolyó_cnt = -54;

}

else if(eyeball_timer_cnt < 159)

{

szemgolyó_cnt = -40;

}

else if(eyeball_timer_cnt < 160)

{

eyeball_cnt = -10;

}

else if(eyeball_timer_cnt < 161)

{

szemgolyó_cnt = 20;

eyeball_timer_cnt = 0;

}

//Mozgás balra és jobbra

// if(eyeball_flag == 0)

// {

// eyeball_cnt++;

// if(eyeball_cnt >= 94)

// {

// szemgolyó_zászlaja = 1;

// }

// }

// más

// {

// eyeball_cnt–;

// if(eyeball_cnt <= -54)

// {

// szemgolyó_zászlaja = 0;

// }

// }

if(szemgolyó_cnt >= 0)

{

eyeball_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

más

{

eyeball_pos[0] = 0xFF;

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

}

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

}

void eyeball_run()

{

statikus u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Adja hozzá az ESP32 arcfelismerést, hogy felismerje a szemek arcát követő mozgását.

A feldolgozási módszer itt az, hogy az arc észlelésekor a szemek nem mozognak maguktól, és egy változót definiálunk, amely növeli a while ciklust.Amikor a növekmény elér egy bizonyos értéket, a szemgolyók maguktól mozognak.Amikor a soros port fogad adatokat, ez a változó törlődik, és csak akkor mozgatja a szemeket az arc helyzetének megfelelően.A fő kód a következő:

if(rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

más

{

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

Leír_8283(st);

#elif(Communication_type==2)

Describe_Modbus(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Feladás időpontja: 2023. június 26