[Präis-Gewënner Fall] Intelligent Cat Food Kontroll System

——Vum DWIN Entwéckler Forum

An dëser Ausgab stellen mir Iech de Präis-Gewënner Open Source Fall vum DWIN Developer Forum vir: Intelligent Cat Food Control System.D'Ingenieuren hunn den DWIN Smart Écran benotzt fir d'Temperatur, d'Feuchtigkeit an d'verbleiwt Betrag u Kazefudder ze iwwerwaachen, an d'Katze Liewensmëttel iessen records ze retten.Si hunn och eenzegaarteg entworf e Set vun Tëntmolerei Stil UI, souwéi en Tënt Klick Effekt wann Dir vun engem Fanger beréiert, fir d'visuell Perceptioun vum Touch Feedback ze verbesseren.

Aféierung:

1.UI Bild Material

DWIN Smart Écran fäerdeg UI Entwécklung baséiert op Biller, Audio an aner Material muss am Viraus virbereet ginn no dem Écran Display Inhalt.

asv (2)

2.Interface Entwécklung

D'DGUS Software restauréiert den UI Effekt duerch Layer Iwwerlagerung, kombinéiert déi preparéiert Materialien an e komplett Bild an der DGUS Software, a setzt d'Display an d'Touchfunktiounen.

asv (1)

3. Ëmsetzen Klick Effekter an Sound Effekter

D'Touchpositioun gëtt duerch den 51 Programm kritt, den Drockeffekt follegt d'Bewegung vum Fanger, an de Schlësselbegleedungs ​​Sound Effekt gëtt och erreecht.

(1) Entdeckt Touch Location Code a spillt Audio:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8 ech = 0;

 

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

    {

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

        wann(Va[0] == 0x5A01)

        {

        }

        soss

        {

            Paus;

        }

    }

    wann (i != 0) // Éischt klickt fir anzeginn

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, Spill, 2);

    }

}

 

(2) De Code fir Touch Effekt Display ass wéi follegt:

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. De nächste Schrëtt ass fir déi entspriechend Parameteren duerch den Ecran ze setzen, an dann d'Donnéeën un de Kazfudder Controller iwwer ESP32 iwwerdroen fir d'automatesch Fütterungsfunktioun vu Kazfudder ze realiséieren.De spezifesche Code ass wéi follegt:

// Kréien Knäppchen Status

void get_key_status()

{

    int ech = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    wann (Va != 0x0000)

    {

        //Status Säit

        if(Va == 0x0103) //Plaz d'Zuel vu g

        {

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

            setNum = placeGramNum;

            BackPage = 1;// Zréck op Status Säit

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

        }

        soss wann (Va == 0x0102)

        {

            OneSendData3(placeGramNum);//PlazKaz Iesseneemol

        }

        soss wann (Va == 0x0101) // Astellungssäit

        {

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

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

            {

                wann (ech == 0)

                {

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

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

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

                    Write_Dgus(0x3070 + i * 0x10 + 6, aktuell Zäit[i] / 1000 % 10);

                }

                soss

                {

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

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

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);// Gitt d'Astellungssäit

        }

        soss wann (Va == 0x0100) //Record Säit

        {

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

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

            {

                wann (ech == 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);

                }

                soss

                {

                    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);// Gitt Rekord Säit

        }

        //Record Säit

        soss wann (Va == 0x0201) // Rekord Säit virdrun Säit

        {

            if(lookEatCnt > 0)

            {

                lookEatCnt--;

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

                {

                    wann (ech == 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);

                    }

                    soss

                    {

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

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

                    }

                }

            }

        }

        soss wann (Va == 0x0202) // Record Säit nächst Säit

        {

            if(lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

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

                {

                    wann (ech == 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);

                    }

                    soss

                    {

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

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

                    }

                }

            }

        }

        // Säit Astellung

        soss wann (Va == 0x0302)

        {

            wann (ZäitMode == 1)

            {

                ZeitMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        soss wann (Va == 0x0303)

        {

            wann (ZäitMode == 0)

            {

                timeMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        soss wann (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);

        }

        soss wann (Va >= 0x030A && Va <= 0x030F)

        {

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

            backPage = 3;

            backNum = Va;

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

        }

        //Aajustéieren daten Säit

        soss wann (Va == 0x0400) //Confirméieren

        {

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

            switchpage[1] = backPage;

            if (backPage == 1) // Zréck op d'Status Säit

            {

                placeGramNum = setNum;

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

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

            }

            soss wann (backPage == 3)

            {

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

                {

                    u16 wielt = 0;

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

                    timrIntervalHour[backNum - 0x0304] = setNum;

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

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

                }

                soss wann (backNum >= 0x030A && backNum <= 0x030F)

                {

                    u16 wielt = 0;

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

                    currentTime[backNum - 0x030A] = setNum;

                    

                    if(backNum == 0x030A)

                    {

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

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

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

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

                    }

                    soss

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);

        }

        soss wann (Va == 0x0401) //Zréck

        {

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

            switchpage[1] = backPage;

            write_dgus_vp(0x0084, switchpage, 2);

        }

        soss wann (Va == 0x0402) // Numeresch Erhéijung

        {

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

        }

        soss wann (Va == 0x0403) // Numeresch Ofsenkung

        {

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

    }

}


Post Zäit: Sep-19-2023