[Prisbelönt fall] Intelligent Cat Food Control System

——Från DWIN Developer Forum

I det här numret kommer vi att presentera det prisbelönta fallet med öppen källkod från DWIN Developer Forum: Intelligent Cat Food Control System.Ingenjörer använde DWINs smarta skärm för att övervaka temperatur, luftfuktighet och återstående mängd kattmat, och för att spara kattens matuppteckningar.De designade också unikt en uppsättning av gränssnitt för bläckmålningsstil, samt en bläckklickeffekt när de berörs av ett finger, för att förbättra den visuella uppfattningen av beröringsfeedback.

Introduktion:

1.UI bildmaterial

DWIN smart skärm slutför UI-utveckling baserat på bilder, ljud och annat material måste förberedas i förväg enligt skärmens innehåll.

asv (2)

2.Gränssnittsutveckling

DGUS-mjukvaran återställer UI-effekten genom lageröverlagring, kombinerar de förberedda materialen till en komplett bild i DGUS-mjukvaran och ställer in display- och pekfunktionerna.

asv (1)

3. Implementera klickeffekter och ljudeffekter

Anslagspositionen erhålls genom programmet 51, tryckningseffekten följer fingrets rörelse och ljudeffekten för tangentackompanjemanget uppnås också.

(1) Upptäck pekkod och spela upp ljud:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8i = 0;

 

    för(i = 0;i < 3;i++)

    {

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

        if(Va[0] == 0x5A01)

        {

        }

        annan

        {

            ha sönder;

        }

    }

    if(i != 0) //Klicka först för att komma in

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, spela, 2);

    }

}

 

(2) Koden för pekeffektdisplay är följande:

void 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. Nästa steg är att ställa in motsvarande parametrar genom skärmen och sedan överföra data till kattmatskontrollen via ESP32 för att realisera den automatiska matningsfunktionen för kattmat.Den specifika koden är som följer:

//Hämta knappstatus

void get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    if(Va != 0x0000)

    {

        //Status sida

        if(Va == 0x0103) //Placera antalet g

        {

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

            setNum = placeGramNum;

            baksida = 1;//Återgå till statussidan

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

        }

        annat om(Va == 0x0102)

        {

            OneSendData3(placeGramNum);//Platskattmaten gång

        }

        else if(Va == 0x0101) //Inställningssida

        {

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

            för(i = 0;i < 6;i++)

            {

                om(i == 0)

                {

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

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

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

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

                }

                annan

                {

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

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

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);//Öppna inställningssidan

        }

        annat om(Va == 0x0100) //Record sida

        {

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

            för(i = 0;i < 6;i++)

            {

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

                }

                annan

                {

                    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);// Gå in på postsidan

        }

        //Record sida

        else if(Va == 0x0201) //Record page föregående sida

        {

            if(lookEatCnt > 0)

            {

                lookEatCnt--;

                för(i = 0;i < 6;i++)

                {

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

                    }

                    annan

                    {

                        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

        {

            if(lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

                för(i = 0;i < 6;i++)

                {

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

                    }

                    annan

                    {

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

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

                    }

                }

            }

        }

        //Inställningssida

        annat om(Va == 0x0302)

        {

            if(timeMode == 1)

            {

                timeMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        annat om(Va == 0x0303)

        {

            if(timeMode == 0)

            {

                timeMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        annat om(Va >= 0x0304 && Va <= 0x0309)

        {

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

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

        }

        annat om(Va >= 0x030A && Va <= 0x030F)

        {

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

            baksida = 3;

            backNum = Va;

            setNum = aktuellTid[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);

        }

        //Ajustera datasidan

        annat om(Va == 0x0400) //Bekräfta

        {

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

            switchpage[1] = baksida;

            if(backPage == 1) //Återgå till statussidan

            {

                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 välj = 0;

                    välj = (backNum - 0x0304) * 0x10;

                    timrIntervalHour[backNum - 0x0304] = setNum;

                    Write_Dgus(0x3010 + välj + 0, setNum % 10);

                    Write_Dgus(0x3010 + välj + 2, setNum / 10 % 10);

                }

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

                {

                    u16 välj = 0;

                    välj = (backNum - 0x0304) * 0x10;

                    currentTime[backNum - 0x030A] = setNum;

                    

                    if(backNum == 0x030A)

                    {

                        Write_Dgus(0x3010 + välj + 0, setNum % 10);

                        Write_Dgus(0x3010 + välj + 2, setNum / 10 % 10);

                        Write_Dgus(0x3010 + välj + 4, setNum / 100 % 10);

                        Write_Dgus(0x3010 + välj + 6, setNum / 1000 % 10);

                    }

                    annan

                    {

                        Write_Dgus(0x3010 + välj + 0, setNum % 10);

                        Write_Dgus(0x3010 + välj + 2, setNum / 10 % 10);

                    }

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);

        }

        annat om(Va == 0x0401) //Tillbaka

        {

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

            switchpage[1] = baksida;

            write_dgus_vp(0x0084, switchpage, 2);

        }

        annars if(Va == 0x0402) //Numerisk ökning

        {

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

        }

        annars if(Va == 0x0403) //Numerisk minskning

        {

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

    }

}


Posttid: 2023-09-19