——ຈາກ DWIN Developer Forum
ໂຄງການ open source forum developer 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);
}
void blink_run()
{
static u32 run_timer_cnt = 0;
run_timer_cnt++;
ຖ້າ(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 ເພື່ອຄວບຄຸມການເຄື່ອນໄຫວຂອງຕາ.ຫຼັງຈາກຫຼາຍໆຄັ້ງຂອງການດີບັກ, ວິສະວະກອນໄດ້ອອກແບບຊຸດລະຫັດຕໍ່ໄປນີ້.
// ພາບເຄື່ອນໄຫວຕາ
void eyeball_animat(void)
{
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;
}
// ຍ້າຍຊ້າຍແລະຂວາ
// ຖ້າ(eyeball_flag == 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()
{
static u32 run_timer_cnt = 0;
run_timer_cnt++;
ຖ້າ(run_timer_cnt >= 20000)
{
run_timer_cnt = 0;
eyeball_animat();
}
}
5. ເພີ່ມການຮັບຮູ້ໃບຫນ້າ ESP32 ເພື່ອຮັບຮູ້ການເຄື່ອນໄຫວຂອງຕາຕາມໃບຫນ້າ.
ວິທີການປຸງແຕ່ງຢູ່ທີ່ນີ້ແມ່ນວ່າເມື່ອໃບຫນ້າຖືກກວດພົບ, ຕາບໍ່ເຄື່ອນທີ່ດ້ວຍຕົວມັນເອງ, ແລະຕົວແປແມ່ນຖືກກໍານົດໃຫ້ເພີ່ມຂຶ້ນໃນ while loop.ເມື່ອການເພີ່ມຂຶ້ນເຖິງມູນຄ່າທີ່ແນ່ນອນ, eyeballs ຈະຍ້າຍອອກດ້ວຍຕົນເອງ.ເມື່ອພອດ serial ໄດ້ຮັບຂໍ້ມູນ, ຕົວແປນີ້ຈະຖືກລຶບລ້າງ, ແລະຫຼັງຈາກນັ້ນພຽງແຕ່ຍ້າຍຕາຕາມຕໍາແຫນ່ງຂອງໃບຫນ້າ.ລະຫັດຕົ້ນຕໍແມ່ນດັ່ງຕໍ່ໄປນີ້:
ຖ້າ(rec_data_timer_cnt < 1000000)
{
rec_data_timer_cnt++;
}
ອື່ນ
{
eyeball_run();
}
extern u32 rec_data_timer_cnt;
extern u16 eyeball_timer_cnt;
Communication_CMD(u8 st) void
{
ຖ້າ((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