Smart Eye Ibbażat fuq Skrin Ċirkolari DWIN

——Mill-Forum tal-Iżviluppaturi DWIN

Il-proġett ta 'sors miftuħ tal-forum tal-iżviluppaturi DWIN rakkomandat għal kulħadd din id-darba huwa rutina interessanti ħafna għas-simulazzjoni tal-moviment tal-għajnejn tal-bniedem.L-inġinier uża diversi materjali tal-istampa tal-għajnejn tal-bniedem biex jirrealizza funzjonijiet bħal moviment tal-boċċa tal-għajnejn, teptip, rikonoxximent tal-wiċċ u segwitu.

Introduzzjoni għal soluzzjonijiet ta' sors miftuħ:

1. Materjal tal-immaġni tal-UI

Nota tal-editur: L-iskrin intelliġenti DWIN huwa bbażat fuq stampi biex jitlesta l-iżvilupp tal-UI, li jista 'faċilment jirrealizza diversi effetti tal-wiri.

dytrgf (1)

2. Żvilupp tal-interface

Huwa relattivament sempliċi li tiżviluppa l-interface permezz tas-softwer DGUS, u huma meħtieġa biss żewġ kontrolli grafiċi.F'din ir-rutina, l-inġinier għażel skrin intelliġenti tond ta '2.1 pulzieri.

dytrgf (2)

3. Irrealizza animazzjoni blink

Ħalli l-istampi tat-tebqet il-għajn jintwerew wara xulxin f'intervalli:

//Blink animazzjoni

null blink_animat(vojt)

{

if(blink_flag == 0)

{

blink_cnt++;

jekk (blink_cnt >= 4)

{

blink_flag = 1;

}

}

inkella

{

blink_cnt–;

jekk (blink_cnt <= 0)

{

blink_flag = 0;

}

}

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

}

null blink_run()

{

statiku 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. Irrealizza l-boċċi ta 'l-għajnejn iħarsu lejn ix-xellug u l-lemin b'mod naturali.

Dan huwa simili għal teptip, iżda jeħtieġ li tqabbel il-ħin tal-oxxillatur tal-kristall biex tikkontrolla l-moviment tal-għajnejn.Wara ħafna drabi ta 'debugging, l-inġinier iddisinja s-sett ta' kodiċi li ġej.

//Animazzjoni tal-boċċa tal-għajnejn

vojt eyeball_animat(vojt)

{

eyeball_timer_cnt++;

if(eyeball_timer_cnt < 50)

{

eyeball_cnt = 20;

}

inkella jekk(eyeball_timer_cnt < 51)

{

eyeball_cnt = 50;

}

inkella jekk(eyeball_timer_cnt < 52)

{

eyeball_cnt = 80;

}

inkella jekk(eyeball_timer_cnt < 53)

{

eyeball_cnt = 94;

}

inkella jekk(eyeball_timer_cnt < 103)

{

eyeball_cnt = 94;

}

inkella jekk(eyeball_timer_cnt < 104)

{

eyeball_cnt = 80;

}

inkella jekk(eyeball_timer_cnt < 105)

{

eyeball_cnt = 50;

}

inkella jekk(eyeball_timer_cnt < 106)

{

eyeball_cnt = 20;

}

inkella jekk(eyeball_timer_cnt < 107)

{

eyeball_cnt = -10;

}

inkella jekk(eyeball_timer_cnt < 108)

{

eyeball_cnt = -40;

}

inkella jekk(eyeball_timer_cnt < 158)

{

eyeball_cnt = -54;

}

inkella jekk(eyeball_timer_cnt < 159)

{

eyeball_cnt = -40;

}

inkella jekk(eyeball_timer_cnt < 160)

{

eyeball_cnt = -10;

}

inkella jekk(eyeball_timer_cnt < 161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

//Mexxi xellug u lemin

// jekk (bandiera tal-boċċa_għajn == 0)

// {

// eyeball_cnt++;

// jekk(eyeball_cnt >= 94)

// {

// eyeball_flag = 1;

// }

// }

// inkella

// {

// eyeball_cnt–;

// jekk(eyeball_cnt <= -54)

// {

// eyeball_flag = 0;

// }

// }

jekk(eyeball_cnt >= 0)

{

eyeball_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

inkella

{

eyeball_pos[0] = 0xFF;

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

}

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

}

vojt eyeball_run()

{

statiku u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Żid rikonoxximent tal-wiċċ ESP32 biex tirrealizza l-moviment tal-għajnejn li jsegwu l-wiċċ.

Il-metodu tal-ipproċessar hawnhekk huwa li meta l-wiċċ jiġi skopert, l-għajnejn ma jiċċaqilqux waħedhom, u varjabbli hija definita biex tiżdied fil-loop while.Meta l-inkrement jilħaq ċertu valur, il-boċċi tal-għajnejn jimxu waħedhom.Meta l-port tas-serje jirċievi d-dejta, din il-varjabbli se tiġi kklerjata, u mbagħad iċċaqlaq biss l-għajnejn skont il-pożizzjoni tal-wiċċ.Il-kodiċi prinċipali huwa kif ġej:

if(rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

inkella

{

eyeball_run ();

}

extern u32 rec_data_timer_cnt;

extern u16 eyeball_timer_cnt;

null 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)

Iddeskrivi_8283(st);

#elif(Type_Communication==2)

Iddeskrivi_Modbus(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Ħin tal-post: Ġunju-26-2023