ຕາອັດສະລິຍະໂດຍອີງໃສ່ຫນ້າຈໍ DWIN Circular

——ຈາກ DWIN Developer Forum

ໂຄງການ open source forum developer 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);

}

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