——Kutoka Jukwaa la Wasanidi Programu wa DWIN
Mradi wa chanzo huria wa jukwaa la wasanidi wa DWIN unaopendekezwa kwa kila mtu wakati huu ni utaratibu wa kuvutia sana wa kuiga msogeo wa macho ya binadamu. Mhandisi alitumia nyenzo kadhaa za picha za macho ya mwanadamu ili kutambua kazi kama vile harakati ya mboni ya jicho, kupepesa, kutambua uso na kufuata.
Utangulizi wa suluhisho la chanzo wazi:
1. Nyenzo ya picha ya UI
Ujumbe wa Mhariri: Skrini mahiri ya DWIN inategemea picha ili kukamilisha uundaji wa UI, ambayo inaweza kutambua kwa urahisi athari mbalimbali za onyesho.
2. Maendeleo ya interface
Ni rahisi kukuza kiolesura kupitia programu ya DGUS, na vidhibiti viwili tu vya picha vinahitajika. Katika utaratibu huu, mhandisi alichagua skrini mahiri ya duara ya inchi 2.1.
3. Tambua uhuishaji wa blink
Acha picha za kope zionyeshwe kwa zamu kwa vipindi:
//Blink uhuishaji
blink_animat (batili)
{
ikiwa(blink_flag == 0)
{
blink_cnt++;
ikiwa(blink_cnt >= 4)
{
blink_bendera = 1;
}
}
mwingine
{
blink_cnt–;
if(blink_cnt
{
blink_bendera = 0;
}
}
write_dgus_vp(0×3000, (u8 *)&blink_cnt, 2);
}
blink_run utupu()
{
tuli u32 run_timer_cnt = 0;
run_timer_cnt++;
if(run_timer_cnt >= 2000000)
{
run_timer_cnt = 0;
blink_animated();
Kuchelewa_ms(30);
blink_animated();
Kuchelewa_ms(30);
blink_animated();
Kuchelewa_ms(30);
blink_animated();
Kuchelewa_ms(30);
blink_animated();
Kuchelewa_ms(30);
blink_animated();
Kuchelewa_ms(30);
blink_animated();
Kuchelewa_ms(30);
blink_animated();
Kuchelewa_ms(30);
}
}
4. Tambua mboni za macho zinaonekana kushoto na kulia kwa kawaida.
Hii ni sawa na kupepesa, lakini inahitaji kulinganisha wakati wa oscillator ya kioo ili kudhibiti harakati za jicho. Baada ya mara nyingi ya utatuzi, mhandisi alibuni seti zifuatazo za misimbo.
//Uhuishaji wa mboni ya macho
mboni ya jicho_uhuishaji(utupu)
{
eyeball_timer_cnt++;
if(jicho_timer_cnt
{
mboni_cnt = 20;
}
vinginevyo if( eyeball_timer_cnt
{
mboni_cnt = 50;
}
vinginevyo if( eyeball_timer_cnt
{
mboni_cnt = 80;
}
vinginevyo if(eyeball_timer_cnt
{
mboni_cnt = 94;
}
vinginevyo if( eyeball_timer_cnt
{
mboni_cnt = 94;
}
vinginevyo if(mboni_timer_cnt
{
mboni_cnt = 80;
}
vinginevyo if(mboni_timer_cnt
{
mboni_cnt = 50;
}
vinginevyo if( eyeball_timer_cnt
{
mboni_cnt = 20;
}
vinginevyo if( eyeball_timer_cnt
{
mboni_cnt = -10;
}
vinginevyo if( eyeball_timer_cnt
{
mboni_cnt = -40;
}
vinginevyo if( eyeball_timer_cnt
{
mboni_cnt = -54;
}
vinginevyo if( eyeball_timer_cnt
{
mboni_cnt = -40;
}
vinginevyo if( eyeball_timer_cnt
{
mboni_cnt = -10;
}
vinginevyo if( eyeball_timer_cnt
{
mboni_cnt = 20;
eyeball_timer_cnt = 0;
}
//Sogeza kushoto na kulia
// ikiwa(bendera_ya_mboni == 0)
// {
// mboni_cnt++;
// ikiwa(mboni_cnt >= 94)
// {
// bendera_ya_mboni = 1;
// }
// }
// vinginevyo
// {
// mboni_cnt–;
// ikiwa(mboni_cnt
// {
// bendera_ya_mboni = 0;
// }
// }
ikiwa(mboni_cnt >= 0)
{
mboni_ya_pos[0] = 0×00;
mboni_ya_pos[1] = mboni_cnt;
}
mwingine
{
mboni_ya_pos[0] = 0xFF;
mboni_ya_pos[1] = (mboni_cnt & 0xFF);
}
write_dgus_vp(0×3111, (u8 *)&eyeball_pos, 2);
}
mboni tupu_run()
{
tuli u32 run_timer_cnt = 0;
run_timer_cnt++;
if(run_timer_cnt >= 20000)
{
run_timer_cnt = 0;
mboni_ya_uhuishaji();
}
}
5. Ongeza utambuzi wa uso wa ESP32 ili kutambua msogeo wa macho yanayofuata uso.
Njia ya usindikaji hapa ni kwamba wakati uso unapogunduliwa, macho hayatembei yenyewe, na kutofautisha kunafafanuliwa kwa kuongezeka kwa kitanzi cha wakati. Wakati ongezeko linafikia thamani fulani, mboni za macho zitasonga zenyewe. Wakati bandari ya serial inapokea data, tofauti hii itafutwa, na kisha usonge tu macho kulingana na nafasi ya uso. Kanuni kuu ni kama ifuatavyo:
ikiwa(rec_data_timer_cnt
{
rec_data_timer_cnt++;
}
mwingine
{
mboni_ya_kukimbia();
}
extern u32 rec_data_timer_cnt;
extern u16 eyeball_timer_cnt;
utupu Communication_CMD(u8 st)
{
if((uart[st].Rx_F==1 )&&(uart[st].Rx_T==0))
{
rec_data_timer_cnt = 0;
eyeball_timer_cnt = 0;
#kama(Aina_Mawasiliano==1)
Describe_8283(st);
#elif(Aina_Mawasiliano==2)
Describe_Modbus(st);
#endif
uart[st].Rx_F=0;
uart[st].Rx_Num=0;
}
}
Muda wa kutuma: Juni-26-2023