[Award-winning nga kaso] Intelligent Cat Food Control System

——Gikan sa DWIN Developer Forum

Niini nga isyu, among ipaila kanimo ang award-winning nga open source case gikan sa DWIN Developer Forum: Intelligent Cat Food Control System.Gigamit sa mga inhenyero ang DWIN smart screen aron mamonitor ang temperatura, humidity, ug nahabilin nga gidaghanon sa pagkaon sa iring, ug aron matipigan ang mga rekord sa pagkaon sa pagkaon sa iring.Talagsaon usab nga gidesinyo nila ang usa ka hugpong sa estilo sa pagpintal sa tinta nga UI, ingon man usa ka epekto sa pag-click sa tinta kung gihikap sa usa ka tudlo, aron mapalambo ang biswal nga panan-aw sa feedback sa paghikap.

Pasiuna:

1.UI nga materyal nga hulagway

Ang DWIN smart screen mokompleto sa UI development base sa mga hulagway, audio ug uban pang mga materyales kinahanglan nga andam daan sumala sa screen display content.

asv (2)

2.Pag-uswag sa interface

Gipahiuli sa software sa DGUS ang epekto sa UI pinaagi sa layer nga overlay, gihiusa ang giandam nga mga materyales sa usa ka kompleto nga litrato sa software sa DGUS, ug gitakda ang mga function sa pagpakita ug paghikap.

asv (1)

3. Ipatuman ang mga click effect ug sound effects

Ang posisyon sa paghikap makuha pinaagi sa 51 nga programa, ang pagpugos nga epekto nagsunod sa paglihok sa tudlo, ug ang yawe nga accompaniment sound effect nakab-ot usab.

(1) Detect ang touch location code ug ipatugtog ang audio:

walay sulod TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

    kay(i = 0;i <3;i++)

    {

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

        kon(Va[0] == 0x5A01)

        {

        }

        lain

        {

            guba;

        }

    }

    kung(i != 0) //Unang pag-klik aron makasulod

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, dula, 2);

    }

}

 

(2) Ang code alang sa pagpakita sa touch effect mao ang mosunod:

bakante ang TouchStart()

{

    kung(touchAnimationFlag == 1)

    {

        kung(touchAnimationCnt == 0)

        {

            Write_Dgus(0x5011, touchPosX - 100);

            Write_Dgus(0x5012, touchPosY - 100);

        }

 

        Write_Dgus(0x5000, touchAnimationCnt);

        touchAnimationCnt++;

 

        kung(touchAnimationCnt == 6)

        {

            touchAnimationFlag = 0;

            Write_Dgus(0x5011, 1024);

            Write_Dgus(0x5012, 600);

        }

    }

    

}

 

4. Ang sunod nga lakang mao ang pag-set sa katugbang nga mga parameter pinaagi sa screen, ug dayon ipadala ang data ngadto sa cat food controller pinaagi sa ESP32 aron makaamgo sa automatic feeding function sa cat food.Ang piho nga code mao ang mosunod:

//Kuhaa ang kahimtang sa buton

void get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    kung(Va != 0x0000)

    {

        //Spanid

        if(Va == 0x0103) //Ibutang ang numero sa g

        {

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

            setNum = placeGramNum;

            backPage = 1;//Balik sa panid sa kahimtang

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

        }

        lain kon(Va == 0x0102)

        {

            OneSendData3(placeGramNum);//Dapitpagkaon sa iringkausa

        }

        lain kung (Va == 0x0101) //Pag-set sa panid

        {

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

            kay(i = 0;i < 6;i++)

            {

                kon(i == 0)

                {

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

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

                    Write_Dgus(0x3070 + i * 0x10 + 4, kasamtangang Oras[i] / 100 % 10);

                    Write_Dgus(0x3070 + i * 0x10 + 6, kasamtangang Oras[i] / 1000 % 10);

                }

                lain

                {

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

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

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);// Pagsulod sa panid sa mga setting

        }

        lain kon(Va == 0x0100) //Record nga panid

        {

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

            kay(i = 0;i < 6;i++)

            {

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

                }

                lain

                {

                    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);// Pagsulod sa panid sa rekord

        }

        //Record nga panid

        lain kung (Va == 0x0201) // Irekord ang panid sa miaging panid

        {

            kung(lookEatCnt > 0)

            {

                tan-awaEatCnt--;

                kay(i = 0;i < 6;i++)

                {

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

                    }

                    lain

                    {

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

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

                    }

                }

            }

        }

        lain kung (Va == 0x0202) // Irekord ang panid sa sunod nga panid

        {

            kung(lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

                kay(i = 0;i < 6;i++)

                {

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

                    }

                    lain

                    {

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

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

                    }

                }

            }

        }

        //Pagbutang sa panid

        lain kon(Va == 0x0302)

        {

            kung(timeMode == 1)

            {

                timeMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        lain kon(Va == 0x0303)

        {

            kung(timeMode == 0)

            {

                timeMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        lain kon(Va >= 0x0304 && Va <= 0x0309)

        {

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

            likod nga Panid = 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);

        }

        lain kon(Va >= 0x030A && Va <= 0x030F)

        {

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

            likod nga Panid = 3;

            backNum = Va;

            setNum = kasamtangan nga Oras [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);

        }

        //Apag-adjust sa panid sa datos

        lain kon(Va == 0x0400) //Sa pagmatuod sa

        {

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

            switchpage [1] = backPage;

            if(backPage == 1) //Balik sa status page

            {

                placeGramNum = setNum;

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

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

            }

            lain kung(backPage == 3)

            {

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

                {

                    u16 pilion = 0;

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

                    timrIntervalHour[backNum - 0x0304] = setNum;

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

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

                }

                lain kung(backNum >= 0x030A && backNum <= 0x030F)

                {

                    u16 pilion = 0;

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

                    kasamtangang Oras[backNum - 0x030A] = setNum;

                    

                    kung(backNum == 0x030A)

                    {

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

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

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

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

                    }

                    lain

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);

        }

        lain kon(Va == 0x0401) //Balik

        {

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

            switchpage [1] = backPage;

            write_dgus_vp(0x0084, switchpage, 2);

        }

        lain kon(Va == 0x0402) //Numerical nga pagtaas

        {

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

        }

        lain kon(Va == 0x0403) //Numerical nga pagkunhod

        {

            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 sa pag-post: Sep-19-2023