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

——จากฟอรัมนักพัฒนา 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

    -

        วา[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