Խելացի աչք՝ հիմնված DWIN շրջանաձև էկրանի վրա

——DWIN Developer Forum-ից

DWIN ծրագրավորողների ֆորումի բաց կոդով նախագիծը, որն այս անգամ առաջարկվում է բոլորին, շատ հետաքրքիր առօրյա է մարդու աչքերի շարժումը մոդելավորելու համար:Ինժեներն օգտագործել է մարդու աչքի պատկերման մի քանի նյութեր՝ իրականացնելու այնպիսի գործառույթներ, ինչպիսիք են ակնագնդի շարժումը, թարթելը, դեմքի ճանաչումը և հետևելը:

Բաց կոդով լուծումների ներածություն.

1. UI պատկերի նյութ

Խմբագրի նշում. DWIN խելացի էկրանը հիմնված է նկարների վրա՝ UI-ի մշակումն ավարտելու համար, որը կարող է հեշտությամբ իրականացնել ցուցադրման տարբեր էֆեկտներ:

dytrgf (1)

2. Ինտերֆեյսի մշակում

Համեմատաբար պարզ է ինտերֆեյսի մշակումը DGUS ծրագրաշարի միջոցով, և անհրաժեշտ է ընդամենը երկու գրաֆիկական կառավարում:Այս առօրյայում ինժեներն ընտրեց 2,1 դյույմանոց կլոր խելացի էկրան:

dytrgf (2)

3. Իրականացնել թարթել անիմացիա

Թող կոպերի նկարները հերթով ցուցադրվեն ընդմիջումներով.

//Թարթել անիմացիա

void blink_animat (անվավեր)

{

եթե (blink_flag == 0)

{

blink_cnt++;

եթե (blink_cnt >= 4)

{

blink_flag = 1;

}

}

ուրիշ

{

blink_cnt–;

if (blink_cnt <= 0)

{

blink_flag = 0;

}

}

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

}

void blink_run()

{

ստատիկ 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. Գիտակցեք, որ ակնագնդերը բնական կերպով նայում են աջ ու ձախ:

Սա նման է թարթելուն, բայց անհրաժեշտ է համեմատել բյուրեղյա տատանումների ժամանակը, որպեսզի վերահսկի աչքի շարժումը:Բազմաթիվ անգամ վրիպազերծումից հետո ինժեները նախագծեց կոդերի հետևյալ փաթեթը.

//Ակնագնդիկ անիմացիա

void eyeball_animat(անվավեր)

{

eyeball_timer_cnt++;

եթե (աչքի_ժմչփ_cnt < 50)

{

ակնագնդիկ_cnt = 20;

}

else if(eyeball_timer_cnt < 51)

{

ակնագնդիկ_cnt = 50;

}

else if(eyeball_timer_cnt < 52)

{

ակնագնդիկ_cnt = 80;

}

else if(eyeball_timer_cnt < 53)

{

ակնագնդիկ_cnt = 94;

}

else if(eyeball_timer_cnt < 103)

{

ակնագնդիկ_cnt = 94;

}

else if(eyeball_timer_cnt < 104)

{

ակնագնդիկ_cnt = 80;

}

else if(eyeball_timer_cnt < 105)

{

ակնագնդիկ_cnt = 50;

}

else if(eyeball_timer_cnt < 106)

{

ակնագնդիկ_cnt = 20;

}

else if(eyeball_timer_cnt < 107)

{

ակնագնդիկ_cnt = -10;

}

else if(eyeball_timer_cnt < 108)

{

ակնագնդիկ_cnt = -40;

}

else if(eyeball_timer_cnt < 158)

{

ակնագնդիկ_cnt = -54;

}

else if(eyeball_timer_cnt < 159)

{

ակնագնդիկ_cnt = -40;

}

else if(eyeball_timer_cnt < 160)

{

ակնագնդիկ_cnt = -10;

}

else if(eyeball_timer_cnt < 161)

{

ակնագնդիկ_cnt = 20;

ակնագնդիկ_ժմչփ_cnt = 0;

}

//Տեղափոխել աջ և ձախ

// եթե (ակնագնդի_դրոշ == 0)

// {

// eyeball_cnt++;

// եթե (աչքի_cnt >= 94)

// {

// ակնագնդի_դրոշ = 1;

// }

// }

// ուրիշ

// {

// ակնագնդիկ_cnt–;

// եթե (ակնագնդիկ_cnt <= -54)

// {

// ակնագնդի_դրոշ = 0;

// }

// }

if (ակնագնդիկ_cnt >= 0)

{

ակնագնդիկ_pos[0] = 0×00;

ակնագնդիկ_pos[1] = ակնագնդիկ_cnt;

}

ուրիշ

{

ակնագնդիկ_pos[0] = 0xFF;

ակնագնդիկ_pos[1] = (ակնագնդիկ_cnt & 0xFF);

}

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

}

void eyeball_run()

{

ստատիկ u32 run_timer_cnt = 0;

run_timer_cnt++;

if (run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

ակնագնդիկ_animat();

}

}

5. Ավելացրեք ESP32 դեմքի ճանաչում՝ դեմքին հետևող աչքերի շարժումը հասկանալու համար:

Այստեղ մշակման մեթոդն այն է, որ երբ դեմքը հայտնաբերվում է, աչքերն ինքնուրույն չեն շարժվում, և որոշվում է փոփոխական, որը մեծացնում է while հանգույցը:Երբ աճը հասնում է որոշակի արժեքի, ակնագնդերն ինքնուրույն կշարժվեն:Երբ սերիական նավահանգիստը ստանա տվյալներ, այս փոփոխականը կջնջվի, այնուհետև միայն աչքերը կշարժվի՝ ըստ դեմքի դիրքի:Հիմնական կոդը հետևյալն է.

if (rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

ուրիշ

{

ակնագնդիկ_վազք ();

}

extern u32 rec_data_timer_cnt;

արտաքին 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;

ակնագնդիկ_ժմչփ_cnt = 0;

#if (Տեսակ_Հաղորդակցում==1)

Նկարագրել_8283(st);

#elif (Տիպ_Հաղորդակցություն==2)

Describe_Modbus(st);

#վերջ

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Հրապարակման ժամանակը՝ հունիս-26-2023