Smart Eye Base sa DWIN Circular Screen

——Gikan sa DWIN Developer Forum

Ang DWIN developer forum open source nga proyekto nga girekomenda alang sa tanan niining panahona usa ka makaiikag kaayo nga rutina alang sa pagsundog sa paglihok sa mga mata sa tawo.Ang inhenyero migamit ug daghang mga materyal sa hulagway sa mata sa tawo aron matuman ang mga gimbuhaton sama sa paglihok sa eyeball, pagkidlap, pag-ila sa nawong ug pagsunod.

Pasiuna sa open source nga mga solusyon:

1. Materyal nga hulagway sa UI

Mubo nga sulat sa editor: Ang DWIN smart screen gibase sa mga hulagway aron makompleto ang pag-uswag sa UI, nga daling makaamgo sa lainlaing mga epekto sa pagpakita.

dytrgf (1)

2. Pag-uswag sa interface

Sayon ra ang pag-ugmad sa interface pinaagi sa DGUS software, ug duha ra ka graphic control ang gikinahanglan.Niini nga rutina, gipili sa engineer ang usa ka 2.1-pulgada nga lingin nga smart screen.

dytrgf (2)

3. Hunahunaa ang blink animation

Himoa nga ang mga hulagway sa mga tabontabon sa mata ipakita sa turno sa mga agwat:

// Blink animation

walay sulod blink_animat(walay sulod)

{

kung(blink_flag == 0)

{

blink_cnt++;

kung(blink_cnt >= 4)

{

blink_flag = 1;

}

}

lain

{

blink_cnt–;

kung(blink_cnt <= 0)

{

blink_flag = 0;

}

}

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

}

walay sulod blink_run()

{

static u32 run_timer_cnt = 0;

run_timer_cnt++;

kung(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. Makaamgo nga ang mga eyeballs tan-awon sa wala ug tuo nga natural.

Kini susama sa pagkidlap, apan kinahanglan nga itandi ang oras sa kristal nga oscillator aron makontrol ang paglihok sa mata.Human sa daghang mga higayon sa pag-debug, gidesinyo sa engineer ang mosunod nga hugpong sa mga code.

//Eyeball animation

walay sulod eyeball_animat(walay sulod)

{

eyeball_timer_cnt++;

kung(eyeball_timer_cnt < 50)

{

eyeball_cnt = 20;

}

lain kung(eyeball_timer_cnt < 51)

{

eyeball_cnt = 50;

}

lain kung(eyeball_timer_cnt < 52)

{

eyeball_cnt = 80;

}

lain kung(eyeball_timer_cnt < 53)

{

eyeball_cnt = 94;

}

lain kung(eyeball_timer_cnt < 103)

{

eyeball_cnt = 94;

}

lain kung(eyeball_timer_cnt < 104)

{

eyeball_cnt = 80;

}

lain kung(eyeball_timer_cnt < 105)

{

eyeball_cnt = 50;

}

lain kung(eyeball_timer_cnt < 106)

{

eyeball_cnt = 20;

}

lain kung(eyeball_timer_cnt < 107)

{

eyeball_cnt = -10;

}

lain kung(eyeball_timer_cnt < 108)

{

eyeball_cnt = -40;

}

lain kung(eyeball_timer_cnt < 158)

{

eyeball_cnt = -54;

}

lain kung(eyeball_timer_cnt < 159)

{

eyeball_cnt = -40;

}

lain kung(eyeball_timer_cnt < 160)

{

eyeball_cnt = -10;

}

lain kung(eyeball_timer_cnt < 161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

//Lihok sa wala ug tuo

// kung(eyeball_flag == 0)

// {

// eyeball_cnt++;

// kung(eyeball_cnt >= 94)

// {

// eyeball_flag = 1;

// }

// }

// uban pa

// {

// eyeball_cnt–;

// kung(eyeball_cnt <= -54)

// {

// eyeball_flag = 0;

// }

// }

kung(eyeball_cnt >= 0)

{

eyeball_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

lain

{

eyeball_pos[0] = 0xFF;

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

}

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

}

walay sulod eyeball_run()

{

static u32 run_timer_cnt = 0;

run_timer_cnt++;

kung(run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Idugang ang ESP32 nga pag-ila sa nawong aron makaamgo sa paglihok sa mga mata nga nagsunod sa nawong.

Ang pamaagi sa pagproseso dinhi mao nga kung ang nawong makit-an, ang mga mata dili molihok sa ilang kaugalingon, ug usa ka variable ang gihubit nga mosaka sa while loop.Kung ang pag-uswag makaabot sa usa ka piho nga kantidad, ang mga eyeballs molihok sa ilang kaugalingon.Kung ang serial port makadawat og datos, kini nga variable malimpyohan, ug dayon ibalhin ang mga mata sumala sa posisyon sa nawong.Ang nag-unang code mao ang mosunod:

kung(rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

lain

{

eyeball_run();

}

extern u32 rec_data_timer_cnt;

extern u16 eyeball_timer_cnt;

void Komunikasyon_CMD(u8 st)

{

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

Describe_Modbus(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Oras sa pag-post: Hun-26-2023