[Rasti fitues i çmimeve] Sistemi inteligjent i kontrollit të ushqimit për mace

——Nga Forumi i Zhvilluesve DWIN

Në këtë numër, ne do t'ju prezantojmë rastin me burim të hapur të vlerësuar me çmime nga Forumi i Zhvilluesve DWIN: Sistemi Inteligjent i Kontrollit të Ushqimit për Cat.Inxhinierët përdorën ekranin inteligjent DWIN për të monitoruar temperaturën, lagështinë dhe sasinë e mbetur të ushqimit të maceve dhe për të ruajtur të dhënat e ngrënies së ushqimit të maces.Ata projektuan gjithashtu në mënyrë unike një grup ndërfaqesh të stilit të pikturës së bojës, si dhe një efekt klikimi të bojës kur preket nga një gisht, për të përmirësuar perceptimin vizual të reagimeve me prekje.

Prezantimi:

Materiali fotografik 1.UI

Ekrani inteligjent DWIN përfundon zhvillimin e ndërfaqes së përdoruesit bazuar në foto, audio dhe materiale të tjera që duhet të përgatiten paraprakisht sipas përmbajtjes së ekranit.

asv (2)

2.Zhvillimi i ndërfaqes

Softueri DGUS rikthen efektin UI përmes mbivendosjes së shtresës, kombinon materialet e përgatitura në një pamje të plotë në softuerin DGUS dhe vendos funksionet e ekranit dhe të prekjes.

asv (1)

3. Zbatoni efektet e klikimeve dhe efektet zanore

Pozicioni i prekjes merret përmes programit 51, efekti i shtypjes ndjek lëvizjen e gishtit dhe arrihet edhe efekti i tingullit të shoqërimit të çelësit.

(1) Zbuloni kodin e vendndodhjes me prekje dhe luani audio:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

    për (i = 0;i <3;i++)

    {

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

        nëse (Va[0] == 0x5A01)

        {

        }

        tjetër

        {

            pushim;

        }

    }

    if(i != 0) //Klikoni së pari për të hyrë

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        shkrim_dgus_vp(0x00A0, luaj, 2);

    }

}

 

(2) Kodi për shfaqjen e efektit me prekje është si më poshtë:

void TouchStart()

{

    if (Flamuri i Animacionit me prekje == 1)

    {

        nëse (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. Hapi tjetër është të vendosni parametrat përkatës përmes ekranit dhe më pas t'i transmetoni të dhënat kontrolluesit të ushqimit të maceve përmes ESP32 për të realizuar funksionin e të ushqyerit automatik të ushqimit të maceve.Kodi specifik është si më poshtë:

//Merr statusin e butonit

void get_key_status()

{

    int i = 0;

    //u16 Va=Lexo_Dgus(addr);

    u16 Va=Lexo_Dgus(0x1000);

    nëse (Va != 0x0000)

    {

        //Sfaqe tatus

        nëse(Va == 0x0103) //Vendos numrin e g

        {

            u16 ndërrimi[2] = {0x5A01, 19};

            setNum = vendGramNum;

            Faqja e pasme = 1;//Kthehu në faqen e statusit

            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, ndërrimi, 2);

        }

        ndryshe nëse (Va == 0x0102)

        {

            OneSendData3 (vendiGramNum);//Vendiushqim për macenjë herë

        }

        ndryshe if(Va == 0x0101) //Faqja e cilësimeve

        {

            u16 ndërrimi[2] = {0x5A01, 3};

            për(i = 0;i <6;i++)

            {

                nëse (i == 0)

                {

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

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

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

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

                }

                tjetër

                {

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

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

                }

            }

            write_dgus_vp (0x0084, ndërrimi, 2);//Hyni në faqen e cilësimeve

        }

        ndryshe nëse (Va == 0x0100) //Rfaqe regjistrimi

        {

            u16 ndërrimi[2] = {0x5A01, 2};

            për(i = 0;i <6;i++)

            {

                nëse (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);

                }

                tjetër

                {

                    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, ndërrimi, 2);//Hyni faqen e regjistrimit

        }

        //Rfaqe regjistrimi

        else if(Va == 0x0201) //Regjistro faqen e mëparshme

        {

            if (lookEatCnt > 0)

            {

                lookEatCnt--;

                për(i = 0;i <6;i++)

                {

                    nëse (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);

                    }

                    tjetër

                    {

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

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

                    }

                }

            }

        }

        ndryshe nëse (Va == 0x0202) //Regjistro faqen tjetër

        {

            if(lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

                për(i = 0;i <6;i++)

                {

                    nëse (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);

                    }

                    tjetër

                    {

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

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

                    }

                }

            }

        }

        //Faqja e cilësimeve

        ndryshe nëse (Va == 0x0302)

        {

            nëse (Modaliteti kohor == 1)

            {

                Modaliteti i kohës = 0;

                Write_Dgus (0x3A12, 139);

            }

        }

        ndryshe nëse (Va == 0x0303)

        {

            nëse (Modaliteti i kohës == 0)

            {

                Modaliteti i kohës = 1;

                Write_Dgus (0x3A12, 242);

            }

        }

        ndryshe nëse (Va >= 0x0304 && Va <= 0x0309)

        {

            u16 ndërrimi[2] = {0x5A01, 19};

            Faqja e pasme = 3;

            mbrapaNum = Va;

            setNum = timrIntervalOrë[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, ndërrimi, 2);

        }

        ndryshe nëse (Va >= 0x030A && Va <= 0x030F)

        {

            u16 ndërrimi[2] = {0x5A01, 19};

            Faqja e pasme = 3;

            mbrapaNum = Va;

            setNum = momenti Koha[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, ndërrimi, 2);

        }

        //Arregulloni faqen e të dhënave

        ndryshe nëse (Va == 0x0400) //Konfirmo

        {

            ndërrimi u16[2] = {0x5A01, 0x0000};

            ndërrimi[1] = faqja e pasme;

            if(backPage == 1) //Kthehu në faqen e statusit

            {

                vendGramNum = setNum;

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

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

            }

            ndryshe nëse (Faqja e pasme == 3)

            {

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

                {

                    u16 zgjidhni = 0;

                    zgjidhni = (Numri i pasëm - 0x0304) * 0x10;

                    timerIntervalOra[Numri i pasme - 0x0304] = numri i caktuar;

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

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

                }

                ndryshe nëse (backNum >= 0x030A && backNum <= 0x030F)

                {

                    u16 zgjidhni = 0;

                    zgjidhni = (Numri i pasëm - 0x0304) * 0x10;

                    koha aktuale[Numri i pasmë - 0x030A] = numri i caktuar;

                    

                    nëse (Numri i pasëm == 0x030A)

                    {

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

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

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

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

                    }

                    tjetër

                    {

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

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

                    }

                }

            }

            write_dgus_vp (0x0084, ndërrimi, 2);

        }

        ndryshe nëse (Va == 0x0401) //Mbrapa

        {

            ndërrimi u16[2] = {0x5A01, 0x0000};

            ndërrimi[1] = faqja e pasme;

            write_dgus_vp (0x0084, ndërrimi, 2);

        }

        ndryshe nëse(Va == 0x0402) //Rritja numerike

        {

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

        }

        ndryshe if(Va == 0x0403) //Rënie numerike

        {

            nëse (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);

    }

}


Koha e postimit: Shtator-19-2023