ភ្នែកឆ្លាតវៃផ្អែកលើអេក្រង់រង្វង់ DWIN

—— ពីវេទិកាអ្នកអភិវឌ្ឍន៍ DWIN

គម្រោងប្រភពបើកចំហនៃវេទិកាអ្នកអភិវឌ្ឍន៍ DWIN ដែលបានណែនាំសម្រាប់អ្នកគ្រប់គ្នានៅពេលនេះ គឺជាទម្លាប់គួរឱ្យចាប់អារម្មណ៍ខ្លាំងណាស់សម្រាប់ការក្លែងធ្វើចលនានៃភ្នែកមនុស្ស។វិស្វករ​បាន​ប្រើ​សម្ភារៈ​រូបភាព​ភ្នែក​មនុស្ស​ជា​ច្រើន​ដើម្បី​ដឹង​ពី​មុខងារ​ដូច​ជា​ចលនា​គ្រាប់​ភ្នែក ការ​ព្រិច​ភ្នែក ការ​សម្គាល់​មុខ និង​ការ​ធ្វើ​តាម។

ការណែនាំអំពីដំណោះស្រាយប្រភពបើកចំហ៖

1. សម្ភារៈរូបភាព UI

កំណត់សម្គាល់របស់អ្នកកែសម្រួល៖ អេក្រង់ឆ្លាតវៃ DWIN គឺផ្អែកលើរូបភាពដើម្បីបញ្ចប់ការអភិវឌ្ឍន៍ UI ដែលអាចដឹងបានយ៉ាងងាយស្រួលនូវឥទ្ធិពលបង្ហាញផ្សេងៗ។

dytrgf (1​)

2. ការអភិវឌ្ឍន៍ចំណុចប្រទាក់

វាមានលក្ខណៈសាមញ្ញក្នុងការអភិវឌ្ឍន៍ចំណុចប្រទាក់តាមរយៈកម្មវិធី DGUS ហើយមានតែការគ្រប់គ្រងក្រាហ្វិកពីរប៉ុណ្ណោះដែលត្រូវការ។នៅក្នុងទម្លាប់នេះ វិស្វករបានជ្រើសរើសអេក្រង់ឆ្លាតវៃមូលទំហំ 2.1 អ៊ីញ។

dytrgf (2)

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