[กรณีที่ได้รับรางวัล] ระบบควบคุมอาหารแมวอัจฉริยะ

——จากฟอรัมนักพัฒนา DWIN

ในฉบับนี้ เราจะแนะนำกรณีโอเพ่นซอร์สที่ได้รับรางวัลจากฟอรัมนักพัฒนา DWIN: ระบบควบคุมอาหารแมวอัจฉริยะวิศวกรใช้หน้าจออัจฉริยะ DWIN เพื่อตรวจสอบอุณหภูมิ ความชื้น และปริมาณอาหารแมวที่เหลืออยู่ และบันทึกบันทึกการกินอาหารของแมวพวกเขายังออกแบบชุด UI สไตล์การวาดภาพด้วยหมึกอย่างมีเอกลักษณ์ เช่นเดียวกับเอฟเฟกต์การคลิกหมึกเมื่อสัมผัสด้วยนิ้ว เพื่อปรับปรุงการรับรู้ภาพของการตอบสนองการสัมผัส

การแนะนำ:

1.วัสดุรูปภาพ UI

หน้าจออัจฉริยะ DWIN เสร็จสิ้นการพัฒนา UI ตามรูปภาพ เสียง และวัสดุอื่นๆ ที่ต้องจัดเตรียมล่วงหน้าตามเนื้อหาที่แสดงบนหน้าจอ

เอเอสวี (2)

2.การพัฒนาส่วนต่อประสาน

ซอฟต์แวร์ DGUS จะคืนค่าเอฟเฟกต์ UI ผ่านการซ้อนทับเลเยอร์ รวมวัสดุที่เตรียมไว้ให้เป็นภาพที่สมบูรณ์ในซอฟต์แวร์ DGUS และตั้งค่าฟังก์ชันการแสดงผลและการสัมผัส

เอเอสวี (1)

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