—— ពីវេទិកាអ្នកអភិវឌ្ឍន៍ DWIN
គម្រោងប្រភពបើកចំហនៃវេទិកាអ្នកអភិវឌ្ឍន៍ DWIN ដែលបានណែនាំសម្រាប់អ្នកគ្រប់គ្នានៅពេលនេះ គឺជាទម្លាប់គួរឱ្យចាប់អារម្មណ៍ខ្លាំងណាស់សម្រាប់ការក្លែងធ្វើចលនានៃភ្នែកមនុស្ស។វិស្វករបានប្រើសម្ភារៈរូបភាពភ្នែកមនុស្សជាច្រើនដើម្បីដឹងពីមុខងារដូចជាចលនាគ្រាប់ភ្នែក ការព្រិចភ្នែក ការសម្គាល់មុខ និងការធ្វើតាម។
ការណែនាំអំពីដំណោះស្រាយប្រភពបើកចំហ៖
1. សម្ភារៈរូបភាព UI
កំណត់សម្គាល់របស់អ្នកកែសម្រួល៖ អេក្រង់ឆ្លាតវៃ DWIN គឺផ្អែកលើរូបភាពដើម្បីបញ្ចប់ការអភិវឌ្ឍន៍ UI ដែលអាចដឹងបានយ៉ាងងាយស្រួលនូវឥទ្ធិពលបង្ហាញផ្សេងៗ។
2. ការអភិវឌ្ឍន៍ចំណុចប្រទាក់
វាមានលក្ខណៈសាមញ្ញក្នុងការអភិវឌ្ឍន៍ចំណុចប្រទាក់តាមរយៈកម្មវិធី DGUS ហើយមានតែការគ្រប់គ្រងក្រាហ្វិកពីរប៉ុណ្ណោះដែលត្រូវការ។នៅក្នុងទម្លាប់នេះ វិស្វករបានជ្រើសរើសអេក្រង់ឆ្លាតវៃមូលទំហំ 2.1 អ៊ីញ។
3. ដឹងពីចលនាភ្លឹបភ្លែតៗ
អនុញ្ញាតឱ្យរូបភាពនៃត្របកភ្នែកត្រូវបានបង្ហាញជាវេននៅចន្លោះពេល:
// ចលនាភ្លឹបភ្លែតៗ
void blink_animat(void)
{
ប្រសិនបើ (blink_flag == 0)
{
blink_cnt++;
ប្រសិនបើ (blink_cnt >= 4)
{
blink_flag = 1;
}
}
ផ្សេងទៀត។
{
blink_cnt–;
ប្រសិនបើ (blink_cnt <= 0)
{
blink_flag = 0;
}
}
write_dgus_vp(0×3000, (u8 *)&blink_cnt, 2);
}
ចាត់ទុកជាមោឃៈ blink_run()
{
ឋិតិវន្ត u32 run_timer_cnt = 0;
run_timer_cnt++;
ប្រសិនបើ (run_timer_cnt >= 2000000)
{
run_timer_cnt = 0;
blink_animat();
ពន្យាពេល_ms(30);
blink_animat();
ពន្យាពេល_ms(30);
blink_animat();
ពន្យាពេល_ms(30);
blink_animat();
ពន្យាពេល_ms(30);
blink_animat();
ពន្យាពេល_ms(30);
blink_animat();
ពន្យាពេល_ms(30);
blink_animat();
ពន្យាពេល_ms(30);
blink_animat();
ពន្យាពេល_ms(30);
}
}
4. ដឹងច្បាស់ថាភ្នែកមើលទៅឆ្វេងនិងស្តាំដោយធម្មជាតិ។
នេះគឺស្រដៀងនឹងការព្រិចភ្នែក ប៉ុន្តែវាត្រូវការប្រៀបធៀបពេលវេលានៃគ្រីស្តាល់យោលដើម្បីគ្រប់គ្រងចលនាភ្នែក។បន្ទាប់ពីការបំបាត់កំហុសជាច្រើនដង វិស្វករបានរចនាសំណុំកូដដូចខាងក្រោម។
// ចលនាភ្នែក
void eyeball_animat(មោឃៈ)
{
eyeball_timer_cnt++;
ប្រសិនបើ (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;
}
// ផ្លាស់ទីទៅឆ្វេងនិងស្តាំ
// ប្រសិនបើ (ភ្នែក_ទង់ == 0)
// {
// eyeball_cnt++;
// ប្រសិនបើ(eyeball_cnt >= 94)
// {
// eyeball_flag = 1;
// }
// }
// ផ្សេងទៀត។
// {
// eyeball_cnt–;
// ប្រសិនបើ(eyeball_cnt <= -54)
// {
// eyeball_flag = 0;
// }
// }
ប្រសិនបើ (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);
}
void eyeball_run()
{
ឋិតិវន្ត u32 run_timer_cnt = 0;
run_timer_cnt++;
ប្រសិនបើ (run_timer_cnt >= 20000)
{
run_timer_cnt = 0;
eyeball_animat();
}
}
5. បន្ថែមការសម្គាល់មុខ ESP32 ដើម្បីដឹងពីចលនានៃភ្នែកតាមមុខ។
វិធីសាស្រ្តដំណើរការនៅទីនេះគឺថានៅពេលដែលមុខត្រូវបានរកឃើញ ភ្នែកមិនផ្លាស់ទីដោយខ្លួនឯងទេ ហើយអថេរមួយត្រូវបានកំណត់ដើម្បីបង្កើននៅក្នុង while loop។នៅពេលដែលការកើនឡើងឈានដល់តម្លៃជាក់លាក់មួយ គ្រាប់ភ្នែកនឹងផ្លាស់ទីដោយខ្លួនឯង។នៅពេលដែលច្រកសៀរៀលទទួលបានទិន្នន័យ អថេរនេះនឹងត្រូវបានជម្រះ ហើយបន្ទាប់មកគ្រាន់តែផ្លាស់ទីភ្នែកទៅតាមទីតាំងនៃមុខ។កូដចម្បងមានដូចខាងក្រោម៖
ប្រសិនបើ (rec_data_timer_cnt < 1000000)
{
rec_data_timer_cnt++;
}
ផ្សេងទៀត។
{
eyeball_run();
}
ខាងក្រៅ u32 rec_data_timer_cnt;
ខាងក្រៅ u16 eyeball_timer_cnt;
មោឃៈការទំនាក់ទំនង_CMD(u8 st)
{
ប្រសិនបើ((uart[st].Rx_F==1)&&(uart[st].Rx_T==0))
{
rec_data_timer_cnt = 0;
eyeball_timer_cnt = 0;
#if(Type_Communication==1)
Describe_8283(st);
#elif(Type_Communication==2)
Describe_Modbus(st);
#endif
uart[st].Rx_F=0;
uart[st].Rx_Num=0;
}
}
ពេលវេលាបង្ហោះ៖ ថ្ងៃទី 26-06-2023