[Kesi iliyoshinda tuzo] Mfumo wa Akili wa Kudhibiti Chakula cha Paka

——Kutoka Jukwaa la Wasanidi Programu wa DWIN

Katika toleo hili, tutakuletea kesi huria iliyoshinda tuzo kutoka kwa Mijadala ya Wasanidi Programu wa DWIN: Mfumo wa Udhibiti wa Chakula wa Paka Mwenye Akili.Wahandisi walitumia skrini mahiri ya DWIN kufuatilia halijoto, unyevunyevu na kiasi kilichobaki cha chakula cha paka, na kuhifadhi rekodi za ulaji wa chakula cha paka.Pia walitengeneza kiolesura cha kipekee cha mtindo wa uchoraji wa wino, pamoja na madoido ya kubofya kwa wino unapoguswa na kidole, ili kuboresha taswira ya maoni ya mguso.

Utangulizi:

1.UI picha nyenzo

Skrini mahiri ya DWIN inakamilisha uundaji wa UI kulingana na picha, sauti na nyenzo zingine zinahitaji kutayarishwa mapema kulingana na yaliyomo kwenye skrini.

asv (2)

2.Kukuza kiolesura

Programu ya DGUS hurejesha athari ya UI kupitia ufunikaji wa safu, inachanganya vifaa vilivyotayarishwa kuwa picha kamili katika programu ya DGUS, na kuweka vitendakazi vya kuonyesha na kugusa.

asv (1)

3. Tekeleza athari za kubofya na athari za sauti

Msimamo wa kugusa unapatikana kwa njia ya mpango wa 51, athari ya kushinikiza inafuata harakati ya kidole, na athari ya sauti ya kuambatana na ufunguo pia inapatikana.

(1) Tambua msimbo wa eneo la mguso na ucheze sauti:

utupu TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

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

    {

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

        ikiwa(Va[0] == 0x5A01)

        {

        }

        mwingine

        {

            mapumziko;

        }

    }

    if(i != 0) //Bofya kwanza ili kuingia

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        andika_dgus_vp(0x00A0, cheza, 2);

    }

}

 

(2) Nambari ya kuonyesha athari ya mguso ni kama ifuatavyo:

utupu TouchStart()

{

    if(touchAnimationFlag == 1)

    {

        if(touchAnimationCnt == 0)

        {

            Andika_Dgus(0x5011, touchPosX - 100);

            Andika_Dgus(0x5012, touchPosY - 100);

        }

 

        Andika_Dgus(0x5000, touchAnimationCnt);

        touchAnimationCnt++;

 

        if(touchAnimationCnt == 6)

        {

            touchAnimationFlag = 0;

            Andika_Dgus(0x5011, 1024);

            Andika_Dgus(0x5012, 600);

        }

    }

    

}

 

4. Hatua inayofuata ni kuweka vigezo vinavyolingana kupitia skrini, na kisha kusambaza data kwa kidhibiti cha chakula cha paka kupitia ESP32 ili kutambua kazi ya kulisha moja kwa moja ya chakula cha paka.Kanuni maalum ni kama ifuatavyo:

//Pata hali ya kitufe

utupu get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Soma_Dgus(0x1000);

    ikiwa(Va != 0x0000)

    {

        //Sukurasa wa tatu

        if(Va == 0x0103) //Weka nambari ya g

        {

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

            setNum = placeGramNum;

            ukurasa wa nyuma = 1;//Rudi kwenye ukurasa wa hali

            Andika_Dgus(0x4000 + 0, setNum % 10);

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

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

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

            write_dgus_vp (0x0084, switchpage, 2);

        }

        vinginevyo ikiwa(Va == 0x0102)

        {

            OneSendData3(placeGramNum);//Mahalichakula cha pakamara moja

        }

        vinginevyo ikiwa(Va == 0x0101) //Kuweka ukurasa

        {

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

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

            {

                ikiwa(i == 0)

                {

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

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

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

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

                }

                mwingine

                {

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

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

                }

            }

            write_dgus_vp (0x0084, switchpage, 2);//Ingiza ukurasa wa mipangilio

        }

        vinginevyo ikiwa(Va == 0x0100) //Rukurasa wa rekodi

        {

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

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

            {

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

                }

                mwingine

                {

                    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);// Ingiza ukurasa wa rekodi

        }

        //Rukurasa wa rekodi

        vinginevyo if(Va == 0x0201) //Rekodi ukurasa uliopita

        {

            if( lookEatCnt > 0)

            {

                lookEatCnt--;

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

                {

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

                    }

                    mwingine

                    {

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

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

                    }

                }

            }

        }

        vinginevyo if(Va == 0x0202) //Rekodi ukurasa unaofuata

        {

            if(lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

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

                {

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

                    }

                    mwingine

                    {

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

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

                    }

                }

            }

        }

        //Kuweka ukurasa

        vinginevyo ikiwa(Va == 0x0302)

        {

            if(timeMode == 1)

            {

                timeMode = 0;

                Andika_Dgus(0x3A12, 139);

            }

        }

        vinginevyo ikiwa(Va == 0x0303)

        {

            if(timeMode == 0)

            {

                timeMode = 1;

                Andika_Dgus(0x3A12, 242);

            }

        }

        vinginevyo if(Va >= 0x0304 && Va <= 0x0309)

        {

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

            ukurasa wa nyuma = 3;

            backNum = Va;

            setNum = timrIntervalHour[Va - 0x0304];

            Andika_Dgus(0x4000 + 0, setNum % 10);

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

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

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

            write_dgus_vp (0x0084, switchpage, 2);

        }

        vinginevyo if(Va >= 0x030A && Va <= 0x030F)

        {

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

            ukurasa wa nyuma = 3;

            backNum = Va;

            setNum = currentTime[Va - 0x030A];

            Andika_Dgus(0x4000 + 0, setNum % 10);

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

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

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

            write_dgus_vp (0x0084, switchpage, 2);

        }

        //Arekebisha ukurasa wa data

        vinginevyo ikiwa(Va == 0x0400) //Thibitisha

        {

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

            switchpage[1] = backPage;

            if(backPage == 1) //Rudi kwenye ukurasa wa hali

            {

                placeGramNum = setNum;

                Andika_Dgus(0x1140 + 0, mahaliGramNum % 10);

                Andika_Dgus(0x1140 + 2, mahaliGramNum / 10 % 10);

            }

            vinginevyo ikiwa(Ukurasa wa nyuma == 3)

            {

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

                {

                    u16 chagua = 0;

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

                    timrIntervalHour[backNum - 0x0304] = setNum;

                    Andika_Dgus(0x3010 + chagua + 0, setNum % 10);

                    Andika_Dgus(0x3010 + chagua + 2, setNum / 10 % 10);

                }

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

                {

                    u16 chagua = 0;

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

                    currentTime[backNum - 0x030A] = setNum;

                    

                    ikiwa(backNum == 0x030A)

                    {

                        Andika_Dgus(0x3010 + chagua + 0, setNum % 10);

                        Andika_Dgus(0x3010 + chagua + 2, setNum / 10 % 10);

                        Andika_Dgus(0x3010 + chagua + 4, setNum / 100% 10);

                        Andika_Dgus(0x3010 + chagua + 6, setNum / 1000% 10);

                    }

                    mwingine

                    {

                        Andika_Dgus(0x3010 + chagua + 0, setNum % 10);

                        Andika_Dgus(0x3010 + chagua + 2, setNum / 10 % 10);

                    }

                }

            }

            write_dgus_vp (0x0084, switchpage, 2);

        }

        vinginevyo ikiwa(Va == 0x0401) //Nyuma

        {

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

            switchpage[1] = backPage;

            write_dgus_vp (0x0084, switchpage, 2);

        }

        vinginevyo ikiwa(Va == 0x0402) //Ongezeko la nambari

        {

            setNum++;

            Andika_Dgus(0x4000 + 0, setNum % 10);

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

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

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

        }

        vinginevyo ikiwa(Va == 0x0403) // kupungua kwa nambari

        {

            ikiwa(setNum> 0)

                setNum--;

            Andika_Dgus(0x4000 + 0, setNum % 10);

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

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

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

        }

        

        Andika_Dgus(0x1000, 0);

    }

}


Muda wa kutuma: Sep-19-2023