——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.
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.
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