——Z fóra vývojárov DWIN
Open source projekt vývojárskeho fóra DWIN odporúčaný tentoraz všetkým je veľmi zaujímavou rutinou na simuláciu pohybu ľudských očí.Inžinier použil niekoľko obrazových materiálov ľudského oka na realizáciu funkcií, ako je pohyb očnej gule, žmurkanie, rozpoznávanie tváre a sledovanie.
Úvod do open source riešení:
1. Obrazový materiál používateľského rozhrania
Poznámka editora: Inteligentná obrazovka DWIN je založená na obrázkoch na dokončenie vývoja používateľského rozhrania, ktoré dokáže ľahko realizovať rôzne efekty zobrazenia.
2. Vývoj rozhrania
Vývoj rozhrania pomocou softvéru DGUS je pomerne jednoduchý a sú potrebné iba dva grafické ovládacie prvky.V tejto rutine inžinier zvolil 2,1-palcovú okrúhlu inteligentnú obrazovku.
3. Realizujte animáciu blikania
Nechajte obrázky očných viečok postupne zobrazovať v intervaloch:
//Žmurkajúca animácia
void blink_animat(void)
{
if(bliknutie == 0)
{
blink_cnt++;
if(blink_cnt >= 4)
{
blink_flag = 1;
}
}
inak
{
blink_cnt–;
if(blink_cnt <= 0)
{
blink_flag = 0;
}
}
write_dgus_vp(0×3000, (u8 *)&blink_cnt, 2);
}
void blink_run()
{
statický 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. Uvedomte si, že očné buľvy vyzerajú prirodzene doľava a doprava.
Je to podobné ako pri žmurkaní, ale na ovládanie pohybu očí je potrebné porovnať čas kryštálového oscilátora.Po mnohých časoch ladenia inžinier navrhol nasledujúcu sadu kódov.
//Animácia očnej gule
void eyeball_animat(void)
{
eyeball_timer_cnt++;
if(eyeball_timer_cnt < 50)
{
eyeball_cnt = 20;
}
else if(eyeball_timer_cnt < 51)
{
eyeball_cnt = 50;
}
else if(eyeball_timer_cnt < 52)
{
eyeball_cnt = 80;
}
else if(eyeball_timer_cnt < 53)
{
eyeball_cnt = 94;
}
else if(eyeball_timer_cnt < 103)
{
eyeball_cnt = 94;
}
else if(eyeball_timer_cnt < 104)
{
eyeball_cnt = 80;
}
else if(eyeball_timer_cnt < 105)
{
eyeball_cnt = 50;
}
else if(eyeball_timer_cnt < 106)
{
eyeball_cnt = 20;
}
else if(eyeball_timer_cnt < 107)
{
eyeball_cnt = -10;
}
else if(eyeball_timer_cnt < 108)
{
eyeball_cnt = -40;
}
else if(eyeball_timer_cnt < 158)
{
eyeball_cnt = -54;
}
else if(eyeball_timer_cnt < 159)
{
eyeball_cnt = -40;
}
else if(eyeball_timer_cnt < 160)
{
eyeball_cnt = -10;
}
else if(eyeball_timer_cnt < 161)
{
eyeball_cnt = 20;
eyeball_timer_cnt = 0;
}
//Pohyb doľava a doprava
// if(eyeball_flag == 0)
// {
// eyeball_cnt++;
// if(eyeball_cnt >= 94)
// {
// flag_flag = 1;
// }
// }
// inak
// {
// eyeball_cnt–;
// if(eyeball_cnt <= -54)
// {
// príznak_očnej gule = 0;
// }
// }
if(eyeball_cnt >= 0)
{
eyeball_pos[0] = 0×00;
eyeball_pos[1] = eyeball_cnt;
}
inak
{
eyeball_pos[0] = 0xFF;
eyeball_pos[1] = (eyeball_cnt & 0xFF);
}
write_dgus_vp(0×3111, (u8 *)&eyeball_pos, 2);
}
void eyeball_run()
{
statický u32 run_timer_cnt = 0;
run_timer_cnt++;
if(run_timer_cnt >= 20000)
{
run_timer_cnt = 0;
eyeball_animat();
}
}
5. Pridajte rozpoznávanie tváre ESP32, aby ste si uvedomili pohyb očí sledujúcich tvár.
Metóda spracovania je taká, že keď je detegovaná tvár, oči sa samy nepohybujú a v slučke while je definovaná premenná na zvýšenie.Keď prírastok dosiahne určitú hodnotu, očné buľvy sa budú pohybovať samy.Keď sériový port prijme dáta, táto premenná sa vymaže a potom už len pohybujte očami podľa polohy tváre.Hlavný kód je nasledovný:
if(rec_data_timer_cnt < 1000000)
{
rec_data_timer_cnt++;
}
inak
{
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)
Describe_8283(st);
#elif(Typ_komunikácie==2)
Describe_Modbus(st);
#koniec Ak
uart[st].Rx_F=0;
uart[st].Rx_Num=0;
}
}
Čas odoslania: 26. júna 2023