——จากฟอรัมนักพัฒนา DWIN
ในฉบับนี้ เราจะแนะนำกรณีโอเพ่นซอร์สที่ได้รับรางวัลจากฟอรัมนักพัฒนา DWIN: ระบบควบคุมอาหารแมวอัจฉริยะวิศวกรใช้หน้าจออัจฉริยะ DWIN เพื่อตรวจสอบอุณหภูมิ ความชื้น และปริมาณอาหารแมวที่เหลืออยู่ และบันทึกบันทึกการกินอาหารของแมวพวกเขายังออกแบบชุด UI สไตล์การวาดภาพด้วยหมึกอย่างมีเอกลักษณ์ เช่นเดียวกับเอฟเฟกต์การคลิกหมึกเมื่อสัมผัสด้วยนิ้ว เพื่อปรับปรุงการรับรู้ภาพของการตอบสนองการสัมผัส
การแนะนำ:
1.วัสดุรูปภาพ UI
หน้าจออัจฉริยะ DWIN เสร็จสิ้นการพัฒนา UI ตามรูปภาพ เสียง และวัสดุอื่นๆ ที่ต้องจัดเตรียมล่วงหน้าตามเนื้อหาที่แสดงบนหน้าจอ
2.การพัฒนาส่วนต่อประสาน
ซอฟต์แวร์ DGUS จะคืนค่าเอฟเฟกต์ UI ผ่านการซ้อนทับเลเยอร์ รวมวัสดุที่เตรียมไว้ให้เป็นภาพที่สมบูรณ์ในซอฟต์แวร์ DGUS และตั้งค่าฟังก์ชันการแสดงผลและการสัมผัส
3. ใช้เอฟเฟกต์การคลิกและเอฟเฟกต์เสียง
ตำแหน่งสัมผัสได้มาจากโปรแกรม 51 เอฟเฟกต์การกดตามการเคลื่อนไหวของนิ้ว และเอฟเฟกต์เสียงประกอบที่สำคัญก็ทำได้เช่นกัน
(1) ตรวจจับรหัสตำแหน่งสัมผัสและเล่นเสียง:
เป็นโมฆะ TouchDetect()
{
ยู16 วา[3] = 0;
คุณ8 ผม = 0;
สำหรับ(i = 0;i < 3;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)
{
//Sหน้าทาทัส
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 < 6;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) //Rหน้าบันทึก
{
หน้าสวิตช์ u16 [2] = {0x5A01, 2};
สำหรับ(i = 0;i < 6;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);//เข้าสู่หน้าบันทึก
}
//Rหน้าบันทึก
อื่นถ้า (Va == 0x0201) // บันทึกหน้าก่อนหน้า
{
ถ้า (lookEatCnt > 0)
{
lookEatCnt--;
สำหรับ(i = 0;i < 6;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 < eatCnt - 1)
{
lookEatCnt++;
สำหรับ(i = 0;i < 6;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 <= 0x0309)
{
หน้าสวิตช์ 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 <= 0x030F)
{
หน้าสวิตช์ 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);
}
//Aปรับหน้าข้อมูล
อย่างอื่นถ้า (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 <= 0x0309)
{
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 <= 0x030F)
{
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