——ຈາກ DWIN Developer Forum
ໃນສະບັບນີ້, ພວກເຮົາຈະແນະນໍາໃຫ້ທ່ານຮູ້ຈັກກັບກໍລະນີ open source ທີ່ໄດ້ຮັບຮາງວັນຈາກ DWIN Developer Forum: Intelligent Cat Food Control System. ວິສະວະກອນໄດ້ໃຊ້ໜ້າຈໍອັດສະລິຍະຂອງ DWIN ເພື່ອຕິດຕາມອຸນຫະພູມ, ຄວາມຊຸ່ມຊື່ນ, ແລະປະລິມານທີ່ເຫຼືອຂອງອາຫານແມວ, ແລະເພື່ອບັນທຶກບັນທຶກການກິນອາຫານຂອງແມວ. ພວກເຂົາເຈົ້າຍັງໄດ້ອອກແບບຊຸດຂອງຮູບແບບການແຕ້ມຫມຶກ UI ເປັນເອກະລັກ, ເຊັ່ນດຽວກັນກັບຜົນກະທົບການຄລິກຫມຶກໃນເວລາທີ່ສໍາຜັດດ້ວຍນິ້ວມື, ເພື່ອເພີ່ມການຮັບຮູ້ພາບຂອງການຕອບໂຕ້ການສໍາພັດ.
ແນະນຳ:
1.UI ວັດສະດຸຮູບພາບ
ຫນ້າຈໍອັດສະລິຍະ DWIN ສໍາເລັດການພັດທະນາ UI ໂດຍອີງໃສ່ຮູບພາບ, ສຽງແລະອຸປະກອນອື່ນໆຕ້ອງໄດ້ຮັບການກະກຽມລ່ວງຫນ້າຕາມເນື້ອໃນການສະແດງຫນ້າຈໍ.
![ສະຫະລັດ (2)](https://ecdn6.globalso.com/upload/p/1355/source/2024-03/65f96bce84b7f87048.jpg)
2.ການພັດທະນາການໂຕ້ຕອບ
ຊອບແວ DGUS ຟື້ນຟູຜົນກະທົບ UI ໂດຍຜ່ານການວາງຊ້ອນຊັ້ນ, ສົມທົບວັດສະດຸທີ່ກຽມໄວ້ເປັນຮູບພາບທີ່ສົມບູນໃນຊໍແວ DGUS, ແລະກໍານົດຫນ້າທີ່ສະແດງແລະການສໍາພັດ.
![ສະຫະລັດ (1)](https://ecdn6.globalso.com/upload/p/1355/source/2024-03/65f96bd07e78a77806.jpg)
3. ປະຕິບັດຜົນກະທົບຄລິກແລະຜົນກະທົບສຽງ
ຕໍາແຫນ່ງສໍາພັດແມ່ນໄດ້ຮັບໂດຍຜ່ານໂຄງການ 51, ຜົນກະທົບການກົດດັນດັ່ງຕໍ່ໄປນີ້ການເຄື່ອນໄຫວຂອງນິ້ວມື, ແລະຜົນກະທົບສຽງທີ່ສໍາຄັນແມ່ນບັນລຸໄດ້.
(1) ກວດສອບລະຫັດສະຖານທີ່ສໍາພັດແລະຫຼິ້ນສຽງ:
ໂມ້ TouchDetect()
{
u16 ແລະ[3] = 0;
u8 i = 0;
ສໍາລັບ (i = 0; i
{
Va[i] = Read_Dgus(0x0016 + i);
ຖ້າ(Va[0] == 0x5A01)
{
}
ອື່ນ
{
ພັກຜ່ອນ;
}
}
if(i != 0) // ຄລິກທຳອິດເພື່ອເຂົ້າໄປ
{
u16 ຫຼິ້ນ[2] = {0x0001, 0x4000};
touchAnimationFlag = 1;
touchAnimationCnt = 0;
touchPosX = Va[1];
touchPosY = Va[2];
write_dgus_vp(0x00A0, ຫຼິ້ນ, 2);
}
}
(2) ລະຫັດສໍາລັບການສະແດງຜົນກະທົບສໍາພັດແມ່ນດັ່ງຕໍ່ໄປນີ້:
ຫວ່າງ TouchStart()
{
ຖ້າ(touchAnimationFlag == 1)
{
ຖ້າ(touchAnimationCnt == 0)
{
Write_Dgus(0x5011, touchPosX - 100);
Write_Dgus(0x5012, touchPosY - 100);
}
Write_Dgus(0x5000, touchAnimationCnt);
touchAnimationCnt++;
ຖ້າ(touchAnimationCnt == 6)
{
touchAnimationFlag = 0;
Write_Dgus(0x5011, 1024);
Write_Dgus(0x5012, 600);
}
}
}
4. ຂັ້ນຕອນຕໍ່ໄປແມ່ນການກໍານົດພາລາມິເຕີທີ່ສອດຄ້ອງກັນຜ່ານຫນ້າຈໍ, ແລະຫຼັງຈາກນັ້ນສົ່ງຂໍ້ມູນໄປຫາຕົວຄວບຄຸມອາຫານແມວຜ່ານ ESP32 ເພື່ອຮັບຮູ້ການທໍາງານການໃຫ້ອາຫານອັດຕະໂນມັດຂອງອາຫານແມວ. ລະຫັດສະເພາະແມ່ນດັ່ງຕໍ່ໄປນີ້:
// ຂໍສະຖານະປຸ່ມ
get_key_status() void
{
int i = 0;
//u16 Va=Read_Dgus(addr);
u16 Va=Read_Dgus(0x1000);
ຖ້າ(ວາ != 0x0000)
{
//ສຫນ້າເຊື່ອງໄວ້
if(Va == 0x0103) // ວາງຈໍານວນ g
{
u16 switchpage[2] = {0x5A01, 19};
setNum = placeGramNum;
backPage = 1; // ກັບໄປທີ່ໜ້າສະຖານະ
Write_Dgus(0x4000 + 0, setNum % 10);
Write_Dgus(0x4000 + 2, setNum / 10 % 10);
Write_Dgus(0x4000 + 4, setNum / 100 % 10);
Write_Dgus(0x4000 + 6, setNum / 1000 % 10);
write_dgus_vp(0x0084, ສະຫຼັບໜ້າ, 2);
}
ອື່ນຖ້າ(Va == 0x0102)
{
OneSendData3(placeGramNum); //ສະຖານທີ່ອາຫານແມວຄັ້ງດຽວ
}
else if(Va == 0x0101) // ການຕັ້ງໜ້າ
{
u16 switchpage[2] = {0x5A01, 3};
ສໍາລັບ(i = 0;i
{
ຖ້າ(i == 0)
{
Write_Dgus(0x3070 + i * 0x10 + 0, currentTime[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, currentTime[i] / 10 % 10);
Write_Dgus(0x3070 + i * 0x10 + 4, currentTime[i] / 100 % 10);
Write_Dgus(0x3070 + i * 0x10 + 6, currentTime[i] / 1000 % 10);
}
ອື່ນ
{
Write_Dgus(0x3070 + i * 0x10 + 0, currentTime[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, currentTime[i] / 10 % 10);
}
}
write_dgus_vp(0x0084, ສະຫຼັບໜ້າ, 2); // ໃສ່ໜ້າການຕັ້ງຄ່າ
}
ອື່ນຖ້າ(Va == 0x0100) //ຣໜ້າບັນທຶກ
{
u16 switchpage[2] = {0x5A01, 2};
ສໍາລັບ(i = 0;i
{
ຖ້າ(i == 0)
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[0][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[0][i] / 10 % 10);
Write_Dgus(0x2000 + i * 0x10 + 4, eatFeedList[0][i] / 100 % 10);
Write_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[0][i] / 1000 % 10);
}
ອື່ນ
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[0][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[0][i] / 10 % 10);
}
}
write_dgus_vp(0x0084, ສະຫຼັບໜ້າ, 2); // ໃສ່ໜ້າບັນທຶກ
}
//ຣໜ້າບັນທຶກ
else if(Va == 0x0201) // ບັນທຶກໜ້າກ່ອນໜ້າ
{
ຖ້າ (ເບິ່ງEatCnt > 0)
{
ເບິ່ງEatCnt--;
ສໍາລັບ(i = 0;i
{
ຖ້າ(i == 0)
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);
Write_Dgus(0x2000 + i * 0x10 + 4, eatFeedList[lookEatCnt][i] / 100 % 10);
Write_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[lookEatCnt][i] / 1000 % 10);
}
ອື່ນ
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);
}
}
}
}
else if(Va == 0x0202) // ບັນທຶກໜ້າຕໍ່ໄປ
{
ຖ້າ (ເບິ່ງEatCnt
{
lookEatCnt++;
ສໍາລັບ(i = 0;i
{
ຖ້າ(i == 0)
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);
Write_Dgus(0x2000 + i * 0x10 + 4, eatFeedList[lookEatCnt][i] / 100 % 10);
Write_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[lookEatCnt][i] / 1000 % 10);
}
ອື່ນ
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);
}
}
}
}
// ການຕັ້ງຄ່າຫນ້າ
ອື່ນຖ້າ(Va == 0x0302)
{
if(timeMode == 1)
{
timeMode = 0;
Write_Dgus(0x3A12, 139);
}
}
ອື່ນຖ້າ(Va == 0x0303)
{
if(timeMode == 0)
{
timeMode = 1;
Write_Dgus(0x3A12, 242);
}
}
ອື່ນຖ້າ(Va >= 0x0304 && Va
{
u16 switchpage[2] = {0x5A01, 19};
backPage = 3;
backNum = ແລະ;
setNum = timrIntervalHour[Va - 0x0304];
Write_Dgus(0x4000 + 0, setNum % 10);
Write_Dgus(0x4000 + 2, setNum / 10 % 10);
Write_Dgus(0x4000 + 4, setNum / 100 % 10);
Write_Dgus(0x4000 + 6, setNum / 1000 % 10);
write_dgus_vp(0x0084, ສະຫຼັບໜ້າ, 2);
}
ອື່ນຖ້າ(Va >= 0x030A && Va
{
u16 switchpage[2] = {0x5A01, 19};
backPage = 3;
backNum = ແລະ;
setNum = currentTime[Va - 0x030A];
Write_Dgus(0x4000 + 0, setNum % 10);
Write_Dgus(0x4000 + 2, setNum / 10 % 10);
Write_Dgus(0x4000 + 4, setNum / 100 % 10);
Write_Dgus(0x4000 + 6, setNum / 1000 % 10);
write_dgus_vp(0x0084, ສະຫຼັບໜ້າ, 2);
}
//ກdjust ຫນ້າຂໍ້ມູນ
ອື່ນຖ້າ(Va == 0x0400) //ຢືນຢັນ
{
u16 switchpage[2] = {0x5A01, 0x0000};
switchpage[1] = backPage;
if(backPage == 1) // ກັບໄປທີ່ໜ້າສະຖານະ
{
placeGramNum = setNum;
Write_Dgus(0x1140 + 0, placeGramNum % 10);
Write_Dgus(0x1140 + 2, placeGramNum / 10 % 10);
}
ອື່ນຖ້າ(ໜ້າຫຼັງ == 3)
{
ຖ້າ(backNum >= 0x0304 && backNum
{
u16 ເລືອກ = 0;
ເລືອກ = (backNum - 0x0304) * 0x10;
timrIntervalHour[backNum - 0x0304] = setNum;
Write_Dgus(0x3010 + ເລືອກ + 0, setNum % 10);
Write_Dgus(0x3010 + ເລືອກ + 2, setNum / 10 % 10);
}
ອື່ນຖ້າ(backNum >= 0x030A && backNum
{
u16 ເລືອກ = 0;
ເລືອກ = (backNum - 0x0304) * 0x10;
currentTime[backNum - 0x030A] = setNum;
ຖ້າ(backNum == 0x030A)
{
Write_Dgus(0x3010 + ເລືອກ + 0, setNum % 10);
Write_Dgus(0x3010 + ເລືອກ + 2, setNum / 10 % 10);
Write_Dgus(0x3010 + ເລືອກ + 4, setNum / 100 % 10);
Write_Dgus(0x3010 + ເລືອກ + 6, setNum / 1000 % 10);
}
ອື່ນ
{
Write_Dgus(0x3010 + ເລືອກ + 0, setNum % 10);
Write_Dgus(0x3010 + ເລືອກ + 2, setNum / 10 % 10);
}
}
}
write_dgus_vp(0x0084, ສະຫຼັບໜ້າ, 2);
}
ອື່ນຖ້າ(Va == 0x0401) //ກັບຄືນໄປບ່ອນ
{
u16 switchpage[2] = {0x5A01, 0x0000};
switchpage[1] = backPage;
write_dgus_vp(0x0084, ສະຫຼັບໜ້າ, 2);
}
else if(Va == 0x0402) // ຕົວເລກເພີ່ມຂຶ້ນ
{
setNum++;
Write_Dgus(0x4000 + 0, setNum % 10);
Write_Dgus(0x4000 + 2, setNum / 10 % 10);
Write_Dgus(0x4000 + 4, setNum / 100 % 10);
Write_Dgus(0x4000 + 6, setNum / 1000 % 10);
}
else if(Va == 0x0403) // ຕົວເລກຫຼຸດລົງ
{
ຖ້າ(setNum > 0)
setNum--;
Write_Dgus(0x4000 + 0, setNum % 10);
Write_Dgus(0x4000 + 2, setNum / 10 % 10);
Write_Dgus(0x4000 + 4, setNum / 100 % 10);
Write_Dgus(0x4000 + 6, setNum / 1000 % 10);
}
Write_Dgus(0x1000, 0);
}
}
ເວລາປະກາດ: ກັນຍາ-19-2023