Llygad Clyfar Seiliedig ar Sgrin Gylchol DWIN

——Gan Fforwm Datblygwyr DWIN

Mae prosiect ffynhonnell agored fforwm datblygwr DWIN a argymhellir i bawb y tro hwn yn drefn ddiddorol iawn ar gyfer efelychu symudiad llygaid dynol.Defnyddiodd y peiriannydd nifer o ddeunyddiau llun llygad dynol i wireddu swyddogaethau megis symudiad pelen y llygad, amrantu, adnabod wynebau a dilyn.

Cyflwyniad i atebion ffynhonnell agored:

1. deunydd delwedd UI

Nodyn y golygydd: Mae sgrin smart DWIN yn seiliedig ar luniau i gwblhau datblygiad UI, a all wireddu effeithiau arddangos amrywiol yn hawdd.

dytrgf (1)

2. datblygu rhyngwyneb

Mae'n gymharol syml datblygu'r rhyngwyneb trwy feddalwedd DGUS, a dim ond dau reolaeth graffig sydd eu hangen.Yn y drefn hon, dewisodd y peiriannydd sgrin smart crwn 2.1 modfedd.

dytrgf (2)

3. Gwireddu animeiddiad amrantiad

Gadewch i'r lluniau o'r amrannau gael eu harddangos yn eu tro bob hyn a hyn:

//Animeiddiad Blink

gwagle blink_animat(gwag)

{

os(blink_flag == 0)

{

blink_cnt++;

os(blink_cnt>= 4)

{

blink_flag = 1;

}

}

arall

{

blink_cnt–;

os(blink_cnt <= 0)

{

blink_flag = 0;

}

}

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

}

gwagle blink_run()

{

statig u32 run_timer_cnt = 0;

rhedeg_timer_cnt++;

os(run_timer_cnt>= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Oedi_ms(30);

blink_animat();

Oedi_ms(30);

blink_animat();

Oedi_ms(30);

blink_animat();

Oedi_ms(30);

blink_animat();

Oedi_ms(30);

blink_animat();

Oedi_ms(30);

blink_animat();

Oedi_ms(30);

blink_animat();

Oedi_ms(30);

}

}

4. sylweddoli bod y peli llygaid yn edrych i'r chwith ac i'r dde yn naturiol.

Mae hyn yn debyg i blincio, ond mae angen iddo gymharu amser yr osgiliadur grisial i reoli symudiad y llygad.Ar ôl sawl gwaith o ddadfygio, dyluniodd y peiriannydd y set ganlynol o godau.

//Animeiddiad pelen y llygad

pêl llygad gwag_animat (gwag)

{

eyeball_timer_cnt++;

os(eyeball_timer_cnt < 50)

{

eyeball_cnt = 20;

}

arall os(eyeball_timer_cnt < 51)

{

eyeball_cnt = 50;

}

arall os(eyeball_timer_cnt < 52)

{

eyeball_cnt = 80;

}

arall os(eyeball_timer_cnt < 53)

{

eyeball_cnt = 94;

}

arall os(eyeball_timer_cnt < 103)

{

eyeball_cnt = 94;

}

arall os(eyeball_timer_cnt < 104)

{

eyeball_cnt = 80;

}

arall os(eyeball_timer_cnt < 105)

{

eyeball_cnt = 50;

}

arall os(eyeball_timer_cnt < 106)

{

eyeball_cnt = 20;

}

arall os(eyeball_timer_cnt < 107)

{

eyeball_cnt = -10;

}

arall os(eyeball_timer_cnt < 108)

{

eyeball_cnt = -40;

}

arall os(eyeball_timer_cnt < 158)

{

eyeball_cnt = -54;

}

arall os(eyeball_timer_cnt < 159)

{

eyeball_cnt = -40;

}

arall os(eyeball_timer_cnt < 160)

{

eyeball_cnt = -10;

}

arall os(eyeball_timer_cnt < 161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

// Symud i'r chwith ac i'r dde

// if(eyeball_flag == 0)

// {

// eyeball_cnt++;

// os(eyeball_cnt >= 94)

// {

// eyeball_flag = 1 ;

// }

// }

// arall

// {

// eyeball_cnt–;

// if(eyeball_cnt <= -54)

// {

// eyeball_flag = 0;

// }

// }

os(eyeball_cnt>= 0)

{

pelen y llygad_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

arall

{

eyeball_pos[0] = 0xFF;

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

}

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

}

gwag eyeball_run()

{

statig u32 run_timer_cnt = 0;

rhedeg_timer_cnt++;

os(run_timer_cnt>= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Ychwanegu cydnabyddiaeth wyneb ESP32 i wireddu symudiad llygaid yn dilyn yr wyneb.

Y dull prosesu yma yw pan fydd yr wyneb yn cael ei ganfod, nid yw'r llygaid yn symud ar eu pen eu hunain, a diffinnir newidyn i gynyddran yn y ddolen tra.Pan fydd y cynyddiad yn cyrraedd gwerth penodol, bydd y peli llygaid yn symud drostynt eu hunain.Pan fydd y porthladd cyfresol yn derbyn data, bydd y newidyn hwn yn cael ei glirio, ac yna dim ond symud y llygaid yn ôl lleoliad yr wyneb.Mae'r prif god fel a ganlyn:

os(rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

arall

{

eyeball_run();

}

allanol u32 rec_data_timer_cnt;

eyeball_timer_cnt allanol u16;

Cyfathrebu gwag_CMD(u8 af)

{

os((uart[st].Rx_F==1 )&&(uart[st].Rx_T==0))

{

rec_data_timer_cnt = 0;

eyeball_timer_cnt = 0;

#if(Type_Communication==1)

Disgrifiwch_8283(st);

# elif(Type_Communication==2)

Disgrifiwch_Modbus(af);

#endif

uart[af].Rx_F=0;

uart[af].Rx_Num=0;

}

}


Amser postio: Mehefin-26-2023