[ກໍລະນີທີ່ໄດ້ຮັບລາງວັນ] ລະບົບຄວບຄຸມອາຫານແມວອັດສະລິຍະ

——ຈາກ DWIN Developer Forum

ໃນສະບັບນີ້, ພວກເຮົາຈະແນະນໍາໃຫ້ທ່ານຮູ້ຈັກກັບກໍລະນີ open source ທີ່ໄດ້ຮັບຮາງວັນຈາກ DWIN Developer Forum: Intelligent Cat Food Control System.ວິສະວະກອນໄດ້ໃຊ້ໜ້າຈໍອັດສະລິຍະຂອງ DWIN ເພື່ອຕິດຕາມອຸນຫະພູມ, ຄວາມຊຸ່ມຊື່ນ, ແລະປະລິມານທີ່ເຫຼືອຂອງອາຫານແມວ, ແລະເພື່ອບັນທຶກບັນທຶກການກິນອາຫານຂອງແມວ.ພວກເຂົາເຈົ້າຍັງໄດ້ອອກແບບຊຸດຂອງຮູບແບບການແຕ້ມຫມຶກ UI ເປັນເອກະລັກ, ເຊັ່ນດຽວກັນກັບຜົນກະທົບການຄລິກຫມຶກໃນເວລາທີ່ສໍາຜັດດ້ວຍນິ້ວມື, ເພື່ອເພີ່ມການຮັບຮູ້ສາຍຕາຂອງຄວາມຄິດເຫັນສໍາຜັດ.

ແນະນຳ:

1.UI ວັດສະດຸຮູບພາບ

ຫນ້າຈໍອັດສະລິຍະ DWIN ສໍາເລັດການພັດທະນາ UI ໂດຍອີງໃສ່ຮູບພາບ, ສຽງແລະອຸປະກອນອື່ນໆຕ້ອງໄດ້ຮັບການກະກຽມລ່ວງຫນ້າຕາມເນື້ອໃນການສະແດງຫນ້າຈໍ.

asv (2)

2.ການພັດທະນາການໂຕ້ຕອບ

ຊອບແວ DGUS ຟື້ນຟູຜົນກະທົບ UI ໂດຍຜ່ານການວາງຊ້ອນຊັ້ນ, ສົມທົບວັດສະດຸທີ່ກຽມໄວ້ເປັນຮູບພາບທີ່ສົມບູນໃນຊໍແວ DGUS, ແລະກໍານົດຫນ້າທີ່ສະແດງແລະການສໍາພັດ.

asv (1)

3. ປະຕິບັດຜົນກະທົບຄລິກແລະຜົນກະທົບສຽງ

ຕໍາ​ແຫນ່ງ​ສໍາ​ພັດ​ແມ່ນ​ໄດ້​ຮັບ​ໂດຍ​ຜ່ານ​ໂຄງ​ການ 51​, ຜົນ​ກະ​ທົບ​ການ​ກົດ​ດັນ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​ການ​ເຄື່ອນ​ໄຫວ​ຂອງ​ນິ້ວ​ມື​, ແລະ​ຜົນ​ກະ​ທົບ​ສຽງ​ທີ່​ສໍາ​ຄັນ​ແມ່ນ​ບັນ​ລຸ​ໄດ້​.

(1​) ກວດ​ສອບ​ລະ​ຫັດ​ສະ​ຖານ​ທີ່​ສໍາ​ພັດ​ແລະ​ຫຼິ້ນ​ສຽງ​:

ໂມ້ TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

    ສໍາລັບ (i = 0; i < 3; 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)

    {

        //Sໜ້າຕາ

        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 < 6;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) //Rໜ້າບັນທຶກ

        {

            u16 switchpage[2] = {0x5A01, 2};

            ສໍາລັບ(i = 0;i < 6;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);// ໃສ່ໜ້າບັນທຶກ

        }

        //Rໜ້າບັນທຶກ

        else if(Va == 0x0201) // ບັນທຶກໜ້າກ່ອນໜ້າ

        {

            ຖ້າ (ເບິ່ງEatCnt > 0)

            {

                ເບິ່ງEatCnt--;

                ສໍາລັບ(i = 0;i < 6;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 < eatCnt - 1)

            {

                lookEatCnt++;

                ສໍາລັບ(i = 0;i < 6;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 <= 0x0309)

        {

            u16 switchpage[2] = {0x5A01, 19};

            backPage = 3;

            backNum = Va;

            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 <= 0x030F)

        {

            u16 switchpage[2] = {0x5A01, 19};

            backPage = 3;

            backNum = Va;

            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);

        }

        //Adjust ຫນ້າຂໍ້ມູນ

        ອື່ນຖ້າ(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 <= 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 / 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