[Nagrajeni primer] Inteligentni sistem za nadzor mačje hrane

——Iz foruma razvijalcev DWIN

V tej številki vam bomo predstavili nagrajeni odprtokodni primer foruma za razvijalce DWIN: Inteligentni sistem za nadzor mačje hrane.Inženirji so s pametnim zaslonom DWIN spremljali temperaturo, vlago in preostalo količino mačje hrane ter shranili zapise mačjega uživanja hrane.Edinstveno so oblikovali tudi nabor uporabniškega vmesnika v slogu slikanja s črnilom in učinek klika s črnilom ob dotiku s prstom, da izboljšajo vizualno zaznavo povratne informacije na dotik.

Uvod:

1.UI slikovni material

Pametni zaslon DWIN zaključi razvoj uporabniškega vmesnika na podlagi slik, zvoka in drugih materialov, ki jih je treba pripraviti vnaprej glede na vsebino zaslona.

asv (2)

2.Razvoj vmesnika

Programska oprema DGUS obnovi učinek uporabniškega vmesnika s prekrivanjem slojev, združi pripravljene materiale v celotno sliko v programski opremi DGUS in nastavi funkcije prikaza in dotika.

asv (1)

3. Implementirajte učinke klikanja in zvočne učinke

Položaj dotika se pridobi s programom 51, učinek pritiska sledi gibanju prsta, dosežen je tudi zvočni učinek spremljave tipk.

(1) Zaznavanje kode lokacije dotika in predvajanje zvoka:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

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

    {

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

        če(Va[0] == 0x5A01)

        {

        }

        drugače

        {

            odmor;

        }

    }

    if(i != 0) //Prvi klik za vstop

    {

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

        TouchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, predvajanje, 2);

    }

}

 

(2) Koda za zaslon z učinkom na dotik je naslednja:

void TouchStart()

{

    če(touchAnimationFlag == 1)

    {

        če(touchAnimationCnt == 0)

        {

            Write_Dgus(0x5011, touchPosX - 100);

            Write_Dgus(0x5012, touchPosY - 100);

        }

 

        Write_Dgus(0x5000, touchAnimationCnt);

        touchAnimationCnt++;

 

        če(touchAnimationCnt == 6)

        {

            TouchAnimationFlag = 0;

            Write_Dgus(0x5011, 1024);

            Write_Dgus(0x5012, 600);

        }

    }

    

}

 

4. Naslednji korak je nastavitev ustreznih parametrov prek zaslona in nato posredovanje podatkov krmilniku mačje hrane prek ESP32, da se izvede funkcija samodejnega hranjenja mačje hrane.Posebna koda je naslednja:

//Pridobi status gumba

void get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    če (Va != 0x0000)

    {

        //Status stran

        if(Va == 0x0103) //Postavite število g

        {

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

            setNum = PlaceGramNum;

            zadnja stran = 1;//Nazaj na stran s stanjem

            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, preklopna stran, 2);

        }

        sicer če (Va == 0x0102)

        {

            OneSendData3(placeGramNum);//Mestomačja hranaenkrat

        }

        else if(Va == 0x0101) //Stran z nastavitvami

        {

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

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

            {

                če(i == 0)

                {

                    Write_Dgus(0x3070 + i * 0x10 + 0, trenutni čas[i] % 10);

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

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

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

                }

                drugače

                {

                    Write_Dgus(0x3070 + i * 0x10 + 0, trenutni čas[i] % 10);

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

                }

            }

            write_dgus_vp(0x0084, preklopna stran, 2);//Vstopite na stran z nastavitvami

        }

        sicer če (Va == 0x0100) //Record stran

        {

            u16 preklopna stran[2] = {0x5A01, 2};

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

            {

                če(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);

                }

                drugače

                {

                    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, preklopna stran, 2);//Vnesite stran za zapis

        }

        //Record stran

        else if(Va == 0x0201) //Zabeleži prejšnjo stran

        {

            če (lookEatCnt > 0)

            {

                lookEatCnt--;

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

                {

                    če(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);

                    }

                    drugače

                    {

                        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) //Zabeleži naslednjo stran

        {

            if(lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

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

                {

                    če(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);

                    }

                    drugače

                    {

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

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

                    }

                }

            }

        }

        //Nastavitvena stran

        sicer če (Va == 0x0302)

        {

            if(timeMode == 1)

            {

                časovni način = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        sicer če (Va == 0x0303)

        {

            if(timeMode == 0)

            {

                časovni način = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        sicer če (Va >= 0x0304 && Va <= 0x0309)

        {

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

            zadnja stran = 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, preklopna stran, 2);

        }

        sicer če (Va >= 0x030A && Va <= 0x030F)

        {

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

            zadnja stran = 3;

            backNum = Va;

            setNum = trenutni čas [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, preklopna stran, 2);

        }

        //Adjust podatkovna stran

        sicer če (Va == 0x0400) //Potrdi

        {

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

            preklopna stran[1] = zadnja stran;

            if(backPage == 1) //Nazaj na stran s stanjem

            {

                placeGramNum = setNum;

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

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

            }

            sicer če (backPage == 3)

            {

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

                {

                    u16 izberite = 0;

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

                    timrIntervalHour[backNum - 0x0304] = setNum;

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

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

                }

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

                {

                    u16 izberite = 0;

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

                    trenutni čas [backNum - 0x030A] = setNum;

                    

                    if(backNum == 0x030A)

                    {

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

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

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

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

                    }

                    drugače

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, preklopna stran, 2);

        }

        sicer če (Va == 0x0401) //Nazaj

        {

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

            preklopna stran[1] = zadnja stran;

            write_dgus_vp(0x0084, preklopna stran, 2);

        }

        else if(Va == 0x0402) //Številsko povečanje

        {

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

        }

        else if(Va == 0x0403) //Številsko zmanjšanje

        {

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

    }

}


Čas objave: 19. september 2023