—— DWIN Developer Forum မှ
လူတိုင်းအတွက် အကြံပြုထားသည့် DWIN ဆော့ဖ်ဝဲဖိုရမ်သည် ဤတစ်ကြိမ်တွင် လူတိုင်းအတွက် အကြံပြုထားသော open source ပရောဂျက်သည် လူ့မျက်လုံးများ၏ လှုပ်ရှားမှုကို ပုံဖော်ရန်အတွက် အလွန်စိတ်ဝင်စားဖွယ်ကောင်းသော လုပ်ရိုးလုပ်စဉ်တစ်ခုဖြစ်သည်။အင်ဂျင်နီယာသည် မျက်လုံးလှုပ်ရှားမှု၊ မျက်တောင်ခတ်ခြင်း၊ မျက်နှာမှတ်မိခြင်းနှင့် လိုက်ကြည့်ခြင်းစသည့် လုပ်ဆောင်ချက်များကို သိရှိရန် လူ၏မျက်လုံးရုပ်ပုံပစ္စည်းများကို အသုံးပြုခဲ့သည်။
open source ဖြေရှင်းချက်များအတွက် နိဒါန်း-
1. UI ရုပ်ပုံပစ္စည်း
တည်းဖြတ်သူ၏မှတ်ချက်- DWIN စမတ်စခရင်သည် အမျိုးမျိုးသောပြသမှုအကျိုးသက်ရောက်မှုများကို အလွယ်တကူသိရှိနိုင်သည့် UI ဖွံ့ဖြိုးတိုးတက်မှုကို အပြီးသတ်ရန်အတွက် ရုပ်ပုံများကိုအခြေခံထားသည်။
2. Interface ဖွံ့ဖြိုးတိုးတက်မှု
DGUS ဆော့ဖ်ဝဲလ်မှတစ်ဆင့် အင်တာဖေ့စ်ကို တီထွင်ရန်မှာ အတော်လေးရိုးရှင်းပြီး ဂရပ်ဖစ်ထိန်းချုပ်မှုနှစ်ခုသာ လိုအပ်ပါသည်။ဤလုပ်ရိုးလုပ်စဉ်တွင် အင်ဂျင်နီယာသည် 2.1 လက်မပတ်လည် စမတ်စခရင်ကို ရွေးချယ်ခဲ့သည်။
3. မျက်တောင်ခတ်လှုပ်ရှားပုံကို သဘောပေါက်ပါ။
မျက်ခွံပုံများကို ကြားကာလတွင် အလှည့်ကျပြသပါစေ။
// မျက်တောင်ခတ် ကာတွန်း
blink_animat(ပျက်ပြယ်)
{
if(blink_flag == 0)
{
blink_cnt++;
if(blink_cnt >= 4)
{
blink_flag = 1;
}
}
တခြား
{
blink_cnt–;
if(blink_cnt <= 0)
{
blink_flag = 0;
}
}
write_dgus_vp(0×3000၊ (u8 *)&blink_cnt၊ 2);
}
ပျက်ပြယ်သွားသော blink_run()
{
static 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. မျက်လုံးများကို ဘယ်ညာ သဘာဝကျကျ ကြည့်ရှုပါ။
၎င်းသည် မျက်တောင်ခတ်ခြင်းနှင့် ဆင်တူသော်လည်း မျက်လုံးလှုပ်ရှားမှုကို ထိန်းချုပ်ရန်အတွက် crystal oscillator ၏အချိန်ကို နှိုင်းယှဉ်ရန် လိုအပ်သည်။အကြိမ်များစွာ အမှားရှာပြင်ပြီးနောက်၊ အင်ဂျင်နီယာသည် အောက်ပါကုဒ်များကို ဒီဇိုင်းထုတ်ခဲ့သည်။
// မျက်လုံးကာတွန်း
ပျက်ပြယ်သော မျက်လုံးများ_animat(ပျက်ပြယ်)
{
eyeball_timer_cnt++;
if(eyeball_timer_cnt < 50)
{
eyeball_cnt = 20;
}
အခြားဆိုလျှင် (eyeball_timer_cnt < 51)
{
eyeball_cnt = 50;
}
အခြားဆိုလျှင် (eyeball_timer_cnt < 52)
{
eyeball_cnt = 80;
}
အခြားဆိုလျှင် (eyeball_timer_cnt < 53)
{
eyeball_cnt = 94;
}
အခြားဆိုလျှင် (eyeball_timer_cnt < 103)
{
eyeball_cnt = 94;
}
အခြားဆိုလျှင် (eyeball_timer_cnt < 104)
{
eyeball_cnt = 80;
}
အခြားဆိုလျှင် (eyeball_timer_cnt < 105)
{
eyeball_cnt = 50;
}
အခြားဆိုလျှင် (eyeball_timer_cnt < 106)
{
eyeball_cnt = 20;
}
အခြားဆိုလျှင် (eyeball_timer_cnt < 107)
{
eyeball_cnt = -10;
}
အခြားဆိုလျှင် (eyeball_timer_cnt < 108)
{
eyeball_cnt = -40;
}
အခြားဆိုလျှင် (eyeball_timer_cnt < 158)
{
eyeball_cnt = -54;
}
အခြားဆိုလျှင် (eyeball_timer_cnt < 159)
{
eyeball_cnt = -40;
}
အခြားဆိုလျှင် (eyeball_timer_cnt < 160)
{
eyeball_cnt = -10;
}
အခြားဆိုလျှင် (eyeball_timer_cnt < 161)
{
eyeball_cnt = 20;
eyeball_timer_cnt = 0;
}
// ဘယ်ညာ ရွှေ့ပါ။
// if(eyeball_flag == 0)
// {
// eyeball_cnt++;
// if(eyeball_cnt >= 94)
// {
// eyeball_flag = 1;
// }
// }
// တခြား
// {
// eyeball_cnt–;
// if(eyeball_cnt <= -54)
// {
// eyeball_flag = 0;
// }
// }
if(eyeball_cnt >= 0)
{
eyeball_pos[0] = 0×00;
eyeball_pos[1] = eyeball_cnt;
}
တခြား
{
eyeball_pos[0] = 0xFF;
eyeball_pos[1] = (eyeball_cnt & 0xFF);
}
write_dgus_vp(0×3111၊ (u8 *)&eyeball_pos, 2);
}
ပျက်ပြယ်သော eyeball_run()
{
static u32 run_timer_cnt = 0;
run_timer_cnt++;
if(run_timer_cnt >= 20000)
{
run_timer_cnt = 0;
eyeball_animat();
}
}
5. မျက်နှာအောက်ရှိ မျက်လုံးများ၏ ရွေ့လျားမှုကို သိရှိနိုင်ရန် ESP32 မျက်နှာအသိအမှတ်ပြုမှုကို ထည့်ပါ။
ဤနေရာတွင် စီမံဆောင်ရွက်သည့်နည်းလမ်းမှာ မျက်နှာကို တွေ့ရှိသောအခါ၊ မျက်လုံးများသည် ၎င်းတို့ဘာသာ မရွေ့လျားဘဲ while loop တွင် တိုးရန်အတွက် ကိန်းရှင်တစ်ခုကို သတ်မှတ်သည်။တိုးလာမှုသည် သတ်မှတ်ထားသောတန်ဖိုးသို့ ရောက်သောအခါ၊ မျက်လုံးများသည် ၎င်းတို့ဘာသာ ရွေ့လျားသွားလိမ့်မည်။အမှတ်စဉ် ပို့တ်သည် ဒေတာကို လက်ခံရရှိသောအခါ၊ ဤကိန်းရှင်ကို ရှင်းလင်းသွားမည်ဖြစ်ပြီး၊ ထို့နောက် မျက်လုံးများကို မျက်နှာအနေအထားအရသာ ရွှေ့ပါ။အဓိကကုဒ်မှာ အောက်ပါအတိုင်းဖြစ်သည်။
if(rec_data_timer_cnt < 1000000)
{
rec_data_timer_cnt++;
}
တခြား
{
eyeball_run();
}
ပြင်ပ u32 rec_data_timer_cnt;
ပြင်ပ u16 eyeball_timer_cnt;
ပျက်ပြယ်သော 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)
ဖော်ပြပါ_8283(st);
#elif(Type_Communication==2)
ဖော်ပြပါ_Modbus(st);
#endif
uart[st].Rx_F=0;
uart[st].Rx_Num=0;
}
}
တင်ချိန်- ဇွန်လ ၂၆-၂၀၂၃