[Prisvindende sag] Intelligent Cat Food Control System

——Fra DWIN Developer Forum

I dette nummer vil vi præsentere dig for den prisvindende open source-case fra DWIN Developer Forum: Intelligent Cat Food Control System.Ingeniører brugte DWIN-smartskærmen til at overvåge temperatur, luftfugtighed og resterende mængde kattefoder og til at gemme kattens madspiseregistreringer.De har også unikt designet et sæt blækmalingsstil UI, samt en blækklik-effekt, når den berøres af en finger, for at forbedre den visuelle opfattelse af berøringsfeedback.

Introduktion:

1.UI billedmateriale

DWIN-smartskærm fuldender UI-udvikling baseret på billeder, lyd og andre materialer, der skal forberedes på forhånd i henhold til skærmens indhold.

asv (2)

2.Grænsefladeudvikling

DGUS-softwaren gendanner UI-effekten gennem lagoverlejring, kombinerer de forberedte materialer til et komplet billede i DGUS-softwaren og indstiller display- og berøringsfunktionerne.

asv (1)

3. Implementer klikeffekter og lydeffekter

Berøringspositionen opnås gennem 51-programmet, trykeffekten følger fingerens bevægelse, og keyakkompagnement-lydeffekten opnås også.

(1) Registrer berøringsplaceringskode og afspil lyd:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8i = 0;

 

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

    {

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

        if(Va[0] == 0x5A01)

        {

        }

        andet

        {

            pause;

        }

    }

    if(i != 0) //Klik først for at komme ind

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, spil, 2);

    }

}

 

(2) Koden til touch-effektvisning er som følger:

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. Det næste trin er at indstille de tilsvarende parametre gennem skærmen og derefter overføre dataene til kattefodercontrolleren gennem ESP32 for at realisere den automatiske fodringsfunktion af kattefoder.Den specifikke kode er som følger:

//Hent knapstatus

void get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    if(Va != 0x0000)

    {

        //Status side

        if(Va == 0x0103) //Placer antallet af g

        {

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

            setNum = placeGramNum;

            bagside = 1;//Vend tilbage til statussiden

            Write_Dgus(0x4000 + 0, sætNum % 10);

            Write_Dgus(0x4000 + 2, sætNum / 10 % 10);

            Write_Dgus(0x4000 + 4, sætNum / 100 % 10);

            Write_Dgus(0x4000 + 6, sætNum / 1000 % 10);

            write_dgus_vp(0x0084, switchpage, 2);

        }

        else if(Va == 0x0102)

        {

            OneSendData3(placeGramNum);//Placerekattemadenkelt gang

        }

        else if(Va == 0x0101) //Indstillingsside

        {

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

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

            {

                hvis(i == 0)

                {

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

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

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

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

                }

                andet

                {

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

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

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);//Gå ind på indstillingssiden

        }

        else if(Va == 0x0100) //Record side

        {

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

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

            {

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

                }

                andet

                {

                    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);//Indtast postsiden

        }

        //Record side

        else if(Va == 0x0201) //Optag side forrige side

        {

            if(seEatCnt > 0)

            {

                lookEatCnt--;

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

                {

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

                    }

                    andet

                    {

                        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) //Optag side næste side

        {

            if(seEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

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

                {

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

                    }

                    andet

                    {

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

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

                    }

                }

            }

        }

        //Indstillingsside

        andet if(Va == 0x0302)

        {

            if(tidstilstand == 1)

            {

                timeMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        else if(Va == 0x0303)

        {

            if(tidstilstand == 0)

            {

                timeMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        else if(Va >= 0x0304 && Va <= 0x0309)

        {

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

            bagside = 3;

            tilbageNum = Va;

            setNum = timrIntervalHour[Va - 0x0304];

            Write_Dgus(0x4000 + 0, sætNum % 10);

            Write_Dgus(0x4000 + 2, sætNum / 10 % 10);

            Write_Dgus(0x4000 + 4, sætNum / 100 % 10);

            Write_Dgus(0x4000 + 6, sætNum / 1000 % 10);

            write_dgus_vp(0x0084, switchpage, 2);

        }

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

        {

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

            bagside = 3;

            tilbageNum = Va;

            setNum = currentTime[Va - 0x030A];

            Write_Dgus(0x4000 + 0, sætNum % 10);

            Write_Dgus(0x4000 + 2, sætNum / 10 % 10);

            Write_Dgus(0x4000 + 4, sætNum / 100 % 10);

            Write_Dgus(0x4000 + 6, sætNum / 1000 % 10);

            write_dgus_vp(0x0084, switchpage, 2);

        }

        //Ajuster datasiden

        else if(Va == 0x0400) //Bekræfte

        {

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

            switchpage[1] = bagside;

            if(backPage == 1) //Vend tilbage til statussiden

            {

                placeGramNum = sætNum;

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

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

            }

            else if(bagside == 3)

            {

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

                {

                    u16 vælg = 0;

                    vælg = (tilbageNum - 0x0304) * 0x10;

                    timrIntervalHour[tilbageNum - 0x0304] = sætNum;

                    Write_Dgus(0x3010 + vælg + 0, sætNum % 10);

                    Write_Dgus(0x3010 + vælg + 2, sætNum / 10 % 10);

                }

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

                {

                    u16 vælg = 0;

                    vælg = (tilbageNum - 0x0304) * 0x10;

                    currentTime[backNum - 0x030A] = setNum;

                    

                    if(tilbageNum == 0x030A)

                    {

                        Write_Dgus(0x3010 + vælg + 0, sætNum % 10);

                        Write_Dgus(0x3010 + vælg + 2, sætNum / 10 % 10);

                        Write_Dgus(0x3010 + vælg + 4, sætNum / 100 % 10);

                        Write_Dgus(0x3010 + vælg + 6, sætNum / 1000 % 10);

                    }

                    andet

                    {

                        Write_Dgus(0x3010 + vælg + 0, sætNum % 10);

                        Write_Dgus(0x3010 + vælg + 2, sætNum / 10 % 10);

                    }

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);

        }

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

        {

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

            switchpage[1] = bagside;

            write_dgus_vp(0x0084, switchpage, 2);

        }

        else if(Va == 0x0402) //Numerisk stigning

        {

            sætNum++;

            Write_Dgus(0x4000 + 0, sætNum % 10);

            Write_Dgus(0x4000 + 2, sætNum / 10 % 10);

            Write_Dgus(0x4000 + 4, sætNum / 100 % 10);

            Write_Dgus(0x4000 + 6, sætNum / 1000 % 10);

        }

        else if(Va == 0x0403) //Numerisk fald

        {

            if(sætNum > 0)

                sætNum--;

            Write_Dgus(0x4000 + 0, sætNum % 10);

            Write_Dgus(0x4000 + 2, sætNum / 10 % 10);

            Write_Dgus(0x4000 + 4, sætNum / 100 % 10);

            Write_Dgus(0x4000 + 6, sætNum / 1000 % 10);

        }

        

        Write_Dgus(0x1000, 0);

    }

}


Indlægstid: 19. september 2023