[Bekroonde saak] Intelligente Cat Food Control System

——Van DWIN-ontwikkelaarsforum

In hierdie uitgawe sal ons die bekroonde oopbron-geval van die DWIN-ontwikkelaarsforum: Intelligente Cat Food Control System aan u bekendstel.Ingenieurs het die DWIN-slimskerm gebruik om die temperatuur, humiditeit en oorblywende hoeveelheid katkos te monitor, en om die kat se kos-eetrekords te stoor.Hulle het ook 'n stel inkverfstyl-UI, sowel as 'n inkklik-effek wanneer dit deur 'n vinger aangeraak word, uniek ontwerp om die visuele persepsie van aanrakingterugvoer te verbeter.

Inleiding:

1.UI-prentmateriaal

DWIN-slimskerm voltooi UI-ontwikkeling gebaseer op foto's, klank en ander materiaal moet vooraf voorberei word volgens die skermvertoningsinhoud.

asv (2)

2.Interface ontwikkeling

Die DGUS-sagteware herstel die UI-effek deur laagoorleg, kombineer die voorbereide materiaal in 'n volledige prentjie in die DGUS-sagteware, en stel die vertoning en aanraakfunksies in.

asv (1)

3. Implementeer klik-effekte en klankeffekte

Die aanraakposisie word deur die 51-program verkry, die druk-effek volg die beweging van die vinger, en die klankeffek van die sleutelbegeleiding word ook bereik.

(1) Bespeur raakliggingkode en speel oudio:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

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

    {

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

        if(Va[0] == 0x5A01)

        {

        }

        anders

        {

            breek;

        }

    }

    if(i != 0) //Klik eers om in te voer

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, speel, 2);

    }

}

 

(2) Die kode vir aanraakeffekvertoning is soos volg:

nietig 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. Die volgende stap is om die ooreenstemmende parameters deur die skerm te stel, en dan die data na die katvoedselbeheerder deur ESP32 oor te dra om die outomatiese voedingsfunksie van katkos te realiseer.Die spesifieke kode is soos volg:

//Kry knoppiestatus

nietig get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    if(Va != 0x0000)

    {

        //Status bladsy

        if(Va == 0x0103) //Plaas die getal g

        {

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

            setNum = plekGramNum;

            agterblad = 1;//Keer terug na statusbladsy

            Write_Dgus(0x4000 + 0, stelNum % 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, skakelbladsy, 2);

        }

        anders as (Va == 0x0102)

        {

            OneSendData3(plekGramNum);//Plekkatkoseen keer

        }

        anders if(Va == 0x0101) //Instellingsbladsy

        {

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

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

            {

                as(i == 0)

                {

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

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

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

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

                }

                anders

                {

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

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

                }

            }

            write_dgus_vp(0x0084, skakelbladsy, 2);//Voer die instellingsbladsy in

        }

        anders as(Va == 0x0100) //Rrekord bladsy

        {

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

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

            {

                as(i == 0)

                {

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

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

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

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

                }

                anders

                {

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

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

                }

            }

            write_dgus_vp(0x0084, skakelbladsy, 2);//Voer rekordbladsy in

        }

        //Rrekord bladsy

        anders as (Va == 0x0201) // Teken bladsy vorige bladsy op

        {

            if (kykEatCnt > 0)

            {

                kykEatCnt--;

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

                {

                    as(i == 0)

                    {

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

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

                        Write_Dgus(0x2000 + i * 0x10 + 4, eetFeedList[lookEatCnt][i] / 100 % 10);

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

                    }

                    anders

                    {

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

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

                    }

                }

            }

        }

        anders as (Va == 0x0202) // Teken bladsy volgende bladsy op

        {

            if(lookEatCnt < eatCnt - 1)

            {

                kykEatCnt++;

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

                {

                    as(i == 0)

                    {

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

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

                        Write_Dgus(0x2000 + i * 0x10 + 4, eetFeedList[lookEatCnt][i] / 100 % 10);

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

                    }

                    anders

                    {

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

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

                    }

                }

            }

        }

        //Stel bladsy

        anders as (Va == 0x0302)

        {

            if(tydmodus == 1)

            {

                tydmodus = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        anders as (Va == 0x0303)

        {

            if(tydmodus == 0)

            {

                tydmodus = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        anders as (Va >= 0x0304 && Va <= 0x0309)

        {

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

            agterblad = 3;

            backNum = Va;

            setNum = timrIntervalHour[Va - 0x0304];

            Write_Dgus(0x4000 + 0, stelNum % 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, skakelbladsy, 2);

        }

        anders as (Va >= 0x030A && Va <= 0x030F)

        {

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

            agterblad = 3;

            backNum = Va;

            setNum = huidige Tyd[Va - 0x030A];

            Write_Dgus(0x4000 + 0, stelNum % 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, skakelbladsy, 2);

        }

        //Apas databladsy aan

        anders as(Va == 0x0400) //Bevestig

        {

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

            skakelbladsy[1] = agterblad;

            if(backPage == 1) //Keer terug na statusbladsy

            {

                placeGramNum = stelNum;

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

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

            }

            anders as (agterbladsy == 3)

            {

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

                {

                    u16 kies = 0;

                    kies = (terugNum - 0x0304) * 0x10;

                    timrIntervalHour[terugNum - 0x0304] = stelNum;

                    Write_Dgus(0x3010 + kies + 0, stelNum % 10);

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

                }

                anders as (terugNum >= 0x030A && terugNum <= 0x030F)

                {

                    u16 kies = 0;

                    kies = (terugNum - 0x0304) * 0x10;

                    huidige Tyd[terugNum - 0x030A] = stelNum;

                    

                    if(terugNum == 0x030A)

                    {

                        Write_Dgus(0x3010 + kies + 0, stelNum % 10);

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

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

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

                    }

                    anders

                    {

                        Write_Dgus(0x3010 + kies + 0, stelNum % 10);

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

                    }

                }

            }

            write_dgus_vp(0x0084, skakelbladsy, 2);

        }

        anders as(Va == 0x0401) //Terug

        {

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

            skakelbladsy[1] = agterblad;

            write_dgus_vp(0x0084, skakelbladsy, 2);

        }

        anders as(Va == 0x0402) //Numeriese toename

        {

            stelNum++;

            Write_Dgus(0x4000 + 0, stelNum % 10);

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

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

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

        }

        anders as(Va == 0x0403) //Numeriese afname

        {

            if(stelGetal > 0)

                stelGetal--;

            Write_Dgus(0x4000 + 0, stelNum % 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);

    }

}


Postyd: 19-Sep-2023