[Kasu saritua] Katuen Elikagaien Kontrol Sistema Adimenduna

——DWIN Garatzaileen Forotik

Ale honetan, DWIN Garatzaileen Forotik saritutako kode irekiko kasua aurkeztuko dizugu: Intelligent Cat Food Control System.Ingeniariek DWIN pantaila adimenduna erabili zuten katuaren janariaren tenperatura, hezetasuna eta geratzen den kantitatea kontrolatzeko eta katuaren jatekoen erregistroak gordetzeko.Tinta-pintura estiloko UI multzo bat ere diseinatu zuten, baita hatz batek ukitzean tinta-klikaren efektua ere, ukipenaren iritziaren pertzepzioa hobetzeko.

Sarrera:

1.UI irudiaren materiala

DWIN pantaila adimendunak irudietan, audioan eta bestelako materialetan oinarritutako interfazearen garapena osatzen du aldez aurretik pantailaren bistaratzeko edukiaren arabera prestatu behar dira.

asv (2)

2.Interfazearen garapena

DGUS softwareak UI efektua berreskuratzen du geruza gainjartzearen bidez, prestatutako materialak DGUS softwarean irudi oso batean konbinatzen ditu eta pantaila eta ukipen funtzioak ezartzen ditu.

asv (1)

3. Klik-efektuak eta soinu-efektuak ezarri

Ukipen-posizioa 51 programaren bidez lortzen da, sakatzearen efektuak hatzaren mugimenduari jarraitzen dio eta teklaren akonpainamenduko soinu efektua ere lortzen da.

(1) Detektatu ukipen-kode kodea eta erreproduzitu audioa:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

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

    {

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

        bada(Va[0] == 0x5A01)

        {

        }

        bestela

        {

            hautsi;

        }

    }

    if(i != 0) //Lehen egin klik sartzeko

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, play, 2);

    }

}

 

(2) Ukipen efektuaren bistaratzeko kodea honako hau da:

void TouchStart()

{

    if (ukituAnimationFlag == 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. Hurrengo urratsa pantailaren bidez dagozkien parametroak ezartzea da, eta, ondoren, datuak katuaren elikagaien kontrolagailura igortzea ESP32 bidez, katuaren janariaren elikadura automatikoko funtzioaz jabetzeko.Kode espezifikoa honako hau da:

// Lortu botoiaren egoera

void get_key_status()

{

    int i = 0;

    //u16 Va=Irakurri_Dgus(helbidea);

    u16 Va=Irakurri_Dgus(0x1000);

    bada (Va != 0x0000)

    {

        //Statu orria

        if(Va == 0x0103) //Jarri g-kopurua

        {

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

            setNum = placeGramNum;

            atzeraOrria = 1;//Itzuli egoera orrira

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

        }

        bestela bada (Va == 0x0102)

        {

            OneSendData3(placeGramNum);//Lekuakatu janariabehin

        }

        else if(Va == 0x0101) //Ezarpen orria

        {

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

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

            {

                baldin (i == 0)

                {

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

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

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

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

                }

                bestela

                {

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

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

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);//Sartu ezarpenen orrian

        }

        bestela bada (Va == 0x0100) //Record orria

        {

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

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

            {

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

                }

                bestela

                {

                    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);//Sartu erregistro orria

        }

        //Record orria

        else if(Va == 0x0201) //Grabatu orrialdea aurreko orrialdea

        {

            bada(lookEatCnt > 0)

            {

                begiratuEatCnt--;

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

                {

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

                    }

                    bestela

                    {

                        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) //Grabatu orrialdea hurrengo orrialdea

        {

            bada(begiratuJanCnt < janCnt - 1)

            {

                lookEatCnt++;

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

                {

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

                    }

                    bestela

                    {

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

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

                    }

                }

            }

        }

        //Ezarpen orria

        bestela bada (Va == 0x0302)

        {

            if(denboraModua == 1)

            {

                denboraModua = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        bestela bada (Va == 0x0303)

        {

            if (denboraModua == 0)

            {

                denboraModua = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        bestela bada (Va >= 0x0304 && Va <= 0x0309)

        {

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

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

        }

        bestela bada (Va >= 0x030A && Va <= 0x030F)

        {

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

            atzeraOrria = 3;

            backNum = Va;

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

        }

        //Aegokitu datuen orria

        bestela bada (Va == 0x0400) //Berretsi

        {

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

            switchpage[1] = atzera orrialdea;

            if(backPage == 1) //Itzuli egoera orrira

            {

                placeGramNum = setNum;

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

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

            }

            else if (atzeraOrria == 3)

            {

                if (atzera Zenbakia >= 0x0304 eta& atzeko Zenbakia <= 0x0309)

                {

                    u16 hautatu = 0;

                    hautatu = (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 hautatu = 0;

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

                    currentTime[backNum - 0x030A] = setNum;

                    

                    bada (atzera Zenbakia == 0x030A)

                    {

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

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

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

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

                    }

                    bestela

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);

        }

        bestela bada (Va == 0x0401) //Itzuli

        {

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

            switchpage[1] = atzera orrialdea;

            write_dgus_vp(0x0084, switchpage, 2);

        }

        else if(Va == 0x0402) //Zenbakizko gehikuntza

        {

            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) //Zenbakizko murrizketa

        {

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

    }

}


Argitalpenaren ordua: 2023-09-19