——DWIN-kehittäjäfoorumista
Tällä kertaa kaikille suositeltava DWIN-kehittäjäfoorumin avoimen lähdekoodin projekti on erittäin mielenkiintoinen rutiini ihmisen silmien liikkeen simulointiin.Insinööri käytti useita ihmissilmäkuvamateriaaleja toteuttaakseen toimintoja, kuten silmämunan liikettä, räpytystä, kasvojentunnistusta ja seuraamista.
Johdatus avoimen lähdekoodin ratkaisuihin:
1. Käyttöliittymän kuvamateriaali
Toimittajan huomautus: DWIN-älynäyttö perustuu kuviin käyttöliittymäkehityksen loppuunsaattamiseksi, mikä voi helposti toteuttaa erilaisia näyttötehosteita.
2. Käyttöliittymän kehittäminen
Käyttöliittymän kehittäminen DGUS-ohjelmistolla on suhteellisen yksinkertaista, ja tarvitaan vain kaksi graafista ohjausta.Tässä rutiinissa insinööri valitsi 2,1 tuuman pyöreän älynäytön.
3. Toteuta vilkkumisen animaatio
Anna silmäluomien kuvat näkyä vuorotellen tietyin väliajoin:
//Räpytyksen animaatio
void blink_animat(void)
{
jos(vilkku_lippu == 0)
{
blink_cnt++;
if(blink_cnt >= 4)
{
vilkku_lippu = 1;
}
}
muu
{
blink_cnt–;
if(blink_cnt <= 0)
{
vilkku_lippu = 0;
}
}
write_dgus_vp(0×3000, (u8 *)&blink_cnt, 2);
}
void blink_run()
{
staattinen u32 run_timer_cnt = 0;
run_timer_cnt++;
if(run_timer_cnt >= 2000000)
{
run_timer_cnt = 0;
blink_animat();
Viive_ms(30);
blink_animat();
Viive_ms(30);
blink_animat();
Viive_ms(30);
blink_animat();
Viive_ms(30);
blink_animat();
Viive_ms(30);
blink_animat();
Viive_ms(30);
blink_animat();
Viive_ms(30);
blink_animat();
Viive_ms(30);
}
}
4. Ymmärrä, että silmämunat näyttävät luonnollisesti vasemmalle ja oikealle.
Tämä on samanlainen kuin räpyttely, mutta sen on verrattava kideoskillaattorin aikaa silmän liikkeen hallitsemiseksi.Useiden virheenkorjauskertojen jälkeen insinööri suunnitteli seuraavan koodisarjan.
//Silmämunan animaatio
void eyeball_animat(tyhjä)
{
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;
}
//Siirry vasemmalle ja oikealle
// jos(silmämunan_lippu == 0)
// {
// eyeball_cnt++;
// if(eyeball_cnt >= 94)
// {
// silmämunan_lippu = 1;
//}
// }
// muuten
// {
// eyeball_cnt–;
// if(eyeball_cnt <= -54)
// {
// silmämunan_lippu = 0;
//}
// }
if(eyeball_cnt >= 0)
{
eyeball_pos[0] = 0×00;
eyeball_pos[1] = eyeball_cnt;
}
muu
{
eyeball_pos[0] = 0xFF;
eyeball_pos[1] = (eyeball_cnt & 0xFF);
}
write_dgus_vp(0×3111, (u8 *)&eyeball_pos, 2);
}
void eyeball_run()
{
staattinen u32 run_timer_cnt = 0;
run_timer_cnt++;
if(run_timer_cnt >= 20000)
{
run_timer_cnt = 0;
eyeball_animat();
}
}
5. Lisää ESP32-kasvontunnistus havaitaksesi kasvojen liikkeet.
Prosessointimenetelmä tässä on se, että kun kasvot tunnistetaan, silmät eivät liiku itsestään, vaan muuttuja on määritetty kasvamaan while-silmukassa.Kun lisäys saavuttaa tietyn arvon, silmämunat liikkuvat itsestään.Kun sarjaportti vastaanottaa dataa, tämä muuttuja tyhjennetään ja sitten vain liikutetaan silmiä kasvojen asennon mukaan.Pääkoodi on seuraava:
if(rec_data_timer_cnt < 1000000)
{
rec_data_timer_cnt++;
}
muu
{
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)
Kuvaile_8283(st);
#elif(Type_Communication==2)
Kuvaile_Modbus(st);
#loppu Jos
uart[st].Rx_F=0;
uart[st].Rx_Num=0;
}
}
Postitusaika: 26.6.2023