——จากฟอรัมนักพัฒนา DWIN
ในฉบับนี้ เราจะแนะนำกรณีโอเพ่นซอร์สที่ได้รับรางวัลจากฟอรัมนักพัฒนา DWIN: ระบบควบคุมอาหารแมวอัจฉริยะ วิศวกรใช้หน้าจออัจฉริยะ 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()
-
ยู16 และ[3] = 0;
คุณ8 ผม = 0;
สำหรับ(i = 0;i
-
วา[i] = Read_Dgus(0x0016 + i);
ถ้า(วา[0] == 0x5A01)
-
-
อื่น
-
หยุดพัก;
-
-
if(i != 0) //คลิกแรกเพื่อเข้า
-
U16 เล่น[2] = {0x0001, 0x4000};
touchAnimationFlag = 1;
touchAnimationCnt = 0;
touchPosX = Va[1];
สัมผัสPosY = 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()
-
อินท์ i = 0;
//u16 Va=Read_Dgus(เพิ่ม);
u16 Va=Read_Dgus(0x1000);
ถ้า(วา!= 0x0000)
-
-สหน้าที่ซ่อนอยู่
if(Va == 0x0103) // วางจำนวน g
-
หน้าสวิตช์ u16 [2] = {0x5A01, 19};
setNum = placeGramNum;
หน้าหลัง = 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 / 1,000 % 10);
write_dgus_vp(0x0084, หน้าสลับ, 2);
-
อย่างอื่นถ้า (Va == 0x0102)
-
OneSendData3(placeGramNum); -สถานที่อาหารแมวครั้งหนึ่ง
-
อื่นถ้า (Va == 0x0101) // หน้าการตั้งค่า
-
หน้าสวิตช์ u16 [2] = {0x5A01, 3};
สำหรับ(i = 0;i
-
ถ้า(ฉัน == 0)
-
Write_Dgus(0x3070 + i * 0x10 + 0, เวลาปัจจุบัน[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, เวลาปัจจุบัน[i] / 10 % 10);
Write_Dgus(0x3070 + i * 0x10 + 4, เวลาปัจจุบัน[i] / 100 % 10);
Write_Dgus(0x3070 + i * 0x10 + 6, เวลาปัจจุบัน[i] / 1,000 % 10);
-
อื่น
-
Write_Dgus(0x3070 + i * 0x10 + 0, เวลาปัจจุบัน[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, เวลาปัจจุบัน[i] / 10 % 10);
-
-
write_dgus_vp(0x0084, หน้าสลับ, 2); //เข้าสู่หน้าการตั้งค่า
-
อย่างอื่นถ้า (Va == 0x0100) //รหน้าบันทึก
-
หน้าสวิตช์ u16 [2] = {0x5A01, 2};
สำหรับ(i = 0;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] / 1,000 % 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); //เข้าสู่หน้าบันทึก
-
-รหน้าบันทึก
อื่นถ้า (Va == 0x0201) // บันทึกหน้าก่อนหน้า
-
ถ้า (lookEatCnt > 0)
-
lookEatCnt--;
สำหรับ(i = 0;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] / 1,000 % 10);
-
อื่น
-
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);
-
-
-
-
อื่นถ้า (Va == 0x0202) // บันทึกหน้าถัดไป
-
ถ้า (lookEatCnt
-
lookEatCnt++;
สำหรับ(i = 0;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] / 1,000 % 10);
-
อื่น
-
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);
-
-
-
-
//การตั้งค่าหน้า
อย่างอื่นถ้า (Va == 0x0302)
-
ถ้า (โหมดเวลา == 1)
-
โหมดเวลา = 0;
Write_Dgus(0x3A12, 139);
-
-
อย่างอื่นถ้า (Va == 0x0303)
-
ถ้า (โหมดเวลา == 0)
-
โหมดเวลา = 1;
Write_Dgus(0x3A12, 242);
-
-
อย่างอื่นถ้า(Va >= 0x0304 && Va
-
หน้าสวิตช์ u16 [2] = {0x5A01, 19};
หน้าหลัง = 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 / 1,000 % 10);
write_dgus_vp(0x0084, หน้าสลับ, 2);
-
อย่างอื่นถ้า(Va >= 0x030A && Va
-
หน้าสวิตช์ u16 [2] = {0x5A01, 19};
หน้าหลัง = 3;
backNum = และ;
setNum = เวลาปัจจุบัน [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 / 1,000 % 10);
write_dgus_vp(0x0084, หน้าสลับ, 2);
-
-กปรับหน้าข้อมูล
อย่างอื่นถ้า (Va == 0x0400) //ยืนยัน
-
หน้าสวิตช์ u16 [2] = {0x5A01, 0x0000};
switchpage[1] = หน้าหลัง;
if(backPage == 1) //กลับสู่หน้าสถานะ
-
placeGramNum = setNum;
Write_Dgus(0x1140 + 0, placeGramNum % 10);
Write_Dgus(0x1140 + 2, placeGramNum / 10 % 10);
-
อย่างอื่นถ้า (backPage == 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 / 1,000 % 10);
-
อื่น
-
Write_Dgus(0x3010 + เลือก + 0, setNum % 10);
Write_Dgus(0x3010 + เลือก + 2, setNum / 10 % 10);
-
-
-
write_dgus_vp(0x0084, หน้าสลับ, 2);
-
อย่างอื่นถ้า (Va == 0x0401) //กลับ
-
หน้าสวิตช์ u16 [2] = {0x5A01, 0x0000};
switchpage[1] = หน้าหลัง;
write_dgus_vp(0x0084, หน้าสลับ, 2);
-
อย่างอื่นถ้า (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 / 1,000 % 10);
-
อย่างอื่นถ้า (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 / 1,000 % 10);
-
Write_Dgus(0x1000, 0);
-
-
เวลาโพสต์: Sep-19-2023