[Award-winning case] Intelligent Cat Food Control System

——Mula sa DWIN Developer Forum

Sa isyung ito, ipakikilala namin sa iyo ang award-winning na open source case mula sa DWIN Developer Forum: Intelligent Cat Food Control System.Ginamit ng mga inhinyero ang DWIN smart screen upang subaybayan ang temperatura, halumigmig, at natitirang dami ng pagkain ng pusa, at upang i-save ang mga talaan ng pagkain ng pagkain ng pusa.Katangi-tangi din nilang idinisenyo ang isang set ng ink painting style UI, pati na rin ang ink click effect kapag hinawakan ng isang daliri, upang mapahusay ang visual na perception ng touch feedback.

Panimula:

1.Materyal ng larawan ng UI

Kinukumpleto ng DWIN smart screen ang pagbuo ng UI batay sa mga larawan, audio at iba pang materyales na kailangang ihanda nang maaga ayon sa nilalaman ng screen display.

asv (2)

2.Pag-unlad ng interface

Ibinabalik ng DGUS software ang UI effect sa pamamagitan ng layer overlay, pinagsasama ang mga inihandang materyales sa isang kumpletong larawan sa DGUS software, at itinatakda ang display at touch functions.

asv (1)

3. Ipatupad ang mga click effect at sound effects

Ang posisyon ng pagpindot ay nakuha sa pamamagitan ng 51 na programa, ang epekto ng pagpindot ay sumusunod sa paggalaw ng daliri, at ang key accompaniment sound effect ay nakakamit din.

(1) I-detect ang touch location code at i-play ang audio:

walang bisa TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

    para sa(i = 0;i <3;i++)

    {

        Va[i] = Read_Dgus(0x0016 + i);

        kung(Va[0] == 0x5A01)

        {

        }

        iba pa

        {

            pahinga;

        }

    }

    if(i != 0) //Unang pag-click para makapasok

    {

        u16 play[2] = {0x0001, 0x4000};

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, play, 2);

    }

}

 

(2) Ang code para sa pagpapakita ng touch effect ay ang mga sumusunod:

walang bisa TouchStart()

{

    if(touchAnimationFlag == 1)

    {

        if(touchAnimationCnt == 0)

        {

            Write_Dgus(0x5011, touchPosX - 100);

            Write_Dgus(0x5012, touchPosY - 100);

        }

 

        Write_Dgus(0x5000, touchAnimationCnt);

        touchAnimationCnt++;

 

        if(touchAnimationCnt == 6)

        {

            touchAnimationFlag = 0;

            Write_Dgus(0x5011, 1024);

            Write_Dgus(0x5012, 600);

        }

    }

    

}

 

4. Ang susunod na hakbang ay upang itakda ang kaukulang mga parameter sa pamamagitan ng screen, at pagkatapos ay ipadala ang data sa cat food controller sa pamamagitan ng ESP32 upang mapagtanto ang awtomatikong pagpapakain function ng cat food.Ang partikular na code ay ang mga sumusunod:

//Kunin ang katayuan ng button

void get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    kung(Va != 0x0000)

    {

        //Spahina ng tatus

        if(Va == 0x0103) //Ilagay ang bilang ng g

        {

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

            setNum = placeGramNum;

            backPage = 1;//Bumalik sa pahina ng katayuan

            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, switchpage, 2);

        }

        else if(Va == 0x0102)

        {

            OneSendData3(placeGramNum);//Lugarpagkain ng pusaminsan

        }

        else if(Va == 0x0101) //Pagse-set ng page

        {

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

            para sa(i = 0;i < 6;i++)

            {

                kung(i == 0)

                {

                    Write_Dgus(0x3070 + i * 0x10 + 0, kasalukuyangOras[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);

                }

                iba pa

                {

                    Write_Dgus(0x3070 + i * 0x10 + 0, kasalukuyangOras[i] % 10);

                    Write_Dgus(0x3070 + i * 0x10 + 2, currentTime[i] / 10 % 10);

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);//Ipasok ang pahina ng mga setting

        }

        else if(Va == 0x0100) //Rpahina ng ecord

        {

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

            para sa(i = 0;i < 6;i++)

            {

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

                }

                iba pa

                {

                    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, switchpage, 2);//Ipasok ang pahina ng talaan

        }

        //Rpahina ng ecord

        else if(Va == 0x0201) //Record page nakaraang page

        {

            kung(lookEatCnt > 0)

            {

                lookEatCnt--;

                para sa(i = 0;i < 6;i++)

                {

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

                    }

                    iba pa

                    {

                        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) //Record page next page

        {

            kung(lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

                para sa(i = 0;i < 6;i++)

                {

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

                    }

                    iba pa

                    {

                        Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);

                        Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);

                    }

                }

            }

        }

        //Pagtatakda ng pahina

        else if(Va == 0x0302)

        {

            kung(timeMode == 1)

            {

                timeMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        else if(Va == 0x0303)

        {

            kung(timeMode == 0)

            {

                timeMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        else if(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, switchpage, 2);

        }

        else if(Va >= 0x030A && Va <= 0x030F)

        {

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

            backPage = 3;

            backNum = Va;

            setNum = kasalukuyangOras[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, switchpage, 2);

        }

        //Aayusin ang pahina ng data

        else if(Va == 0x0400) //Kumpirmahin

        {

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

            switchpage[1] = backPage;

            if(backPage == 1) //Bumalik sa page ng status

            {

                placeGramNum = setNum;

                Write_Dgus(0x1140 + 0, placeGramNum % 10);

                Write_Dgus(0x1140 + 2, placeGramNum / 10 % 10);

            }

            else if(backPage == 3)

            {

                if(backNum >= 0x0304 && backNum <= 0x0309)

                {

                    u16 piliin = 0;

                    piliin = (backNum - 0x0304) * 0x10;

                    timrIntervalHour[backNum - 0x0304] = setNum;

                    Write_Dgus(0x3010 + piliin + 0, setNum % 10);

                    Write_Dgus(0x3010 + piliin + 2, setNum / 10 % 10);

                }

                else if(backNum >= 0x030A && backNum <= 0x030F)

                {

                    u16 piliin = 0;

                    piliin = (backNum - 0x0304) * 0x10;

                    currentTime[backNum - 0x030A] = setNum;

                    

                    if(backNum == 0x030A)

                    {

                        Write_Dgus(0x3010 + piliin + 0, setNum % 10);

                        Write_Dgus(0x3010 + piliin + 2, setNum / 10 % 10);

                        Write_Dgus(0x3010 + piliin + 4, setNum / 100 % 10);

                        Write_Dgus(0x3010 + piliin + 6, setNum / 1000 % 10);

                    }

                    iba pa

                    {

                        Write_Dgus(0x3010 + piliin + 0, setNum % 10);

                        Write_Dgus(0x3010 + piliin + 2, setNum / 10 % 10);

                    }

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);

        }

        else if(Va == 0x0401) //Bumalik

        {

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

            switchpage[1] = backPage;

            write_dgus_vp(0x0084, switchpage, 2);

        }

        else if(Va == 0x0402) //Numerical increase

        {

            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) //Numerical na pagbaba

        {

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

    }

}


Oras ng post: Set-19-2023