[Premiita kazo] Inteligenta Cat Food Control System

——El Forumo por Programistoj de DWIN

En ĉi tiu numero, ni prezentos al vi la premiitan malfermfontan kazon de la Forumo pri Programistoj de DWIN: Inteligenta Cat Food Control System.Inĝenieroj uzis la inteligentan ekranon DWIN por kontroli la temperaturon, humidon kaj restantan kvanton da kata manĝaĵo, kaj por konservi la rekordojn de manĝado de la kato.Ili ankaŭ unike desegnis aron de ink-pentraj stilaj UI, same kiel inkan klakan efikon kiam tuŝite per fingro, por plibonigi la vidan percepton de tuŝo-reagoj.

Enkonduko:

1.UI bildmaterialo

DWIN-inteligenta ekrano kompletigas UI-disvolviĝon bazitan sur bildoj, sonaĵoj kaj aliaj materialoj devas esti preparitaj anticipe laŭ la ekrana ekranenhavo.

asv (2)

2.Interfaco-disvolviĝo

La DGUS-programaro restarigas la UI-efikon per tavolkovraĵo, kombinas la pretajn materialojn en kompletan bildon en la DGUS-programaro kaj fiksas la ekranajn kaj tuŝajn funkciojn.

asv (1)

3. Efektivigi klakajn efikojn kaj sonefektojn

La tuŝa pozicio estas akirita per la programo 51, la prema efiko sekvas la movon de la fingro, kaj la klava akompana sonefekto ankaŭ estas atingita.

(1) Detektu tuŝan lokan kodon kaj ludu audio:

malplena TouchDetect ()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

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

    {

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

        se(Va[0] == 0x5A01)

        {

        }

        alie

        {

            rompi;

        }

    }

    if(i != 0) //Unue alklaku por eniri

    {

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

        tuŝoAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        skribu_dgus_vp(0x00A0, ludi, 2);

    }

}

 

(2) La kodo por ekrano de tuŝa efiko estas jena:

malplena TouchStart ()

{

    se(tuŝuAnimationFlag == 1)

    {

        se(tuŝAnimationCnt == 0)

        {

            Skribu_Dgus(0x5011, touchPosX - 100);

            Skribu_Dgus(0x5012, touchPosY - 100);

        }

 

        Skribu_Dgus(0x5000, touchAnimationCnt);

        touchAnimationCnt++;

 

        se(tuŝAnimationCnt == 6)

        {

            touchAnimationFlag = 0;

            Skribu_Dgus(0x5011, 1024);

            Skribu_Dgus(0x5012, 600);

        }

    }

    

}

 

4. La sekva paŝo estas agordi la respondajn parametrojn tra la ekrano, kaj poste transdoni la datumojn al la kata manĝregilo per ESP32 por realigi la aŭtomatan nutran funkcion de kata manĝaĵo.La specifa kodo estas kiel sekvas:

// Akiri butonstatuson

malplenigi get_key_status()

{

    int i = 0;

    //u16 Va=Legi_Dgus(addr);

    u16 Va=Legi_Dgus(0x1000);

    se (Va != 0x0000)

    {

        //Status paĝo

        if(Va == 0x0103) //Metu la nombron de g

        {

            u16 ŝaltpaĝo[2] = {0x5A01, 19};

            setNum = lokoGramNum;

            retropaĝo = 1;//Reiru al statopaĝo

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

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

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

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

            skribu_dgus_vp(0x0084, ŝaltpaĝo, 2);

        }

        alie se (Va == 0x0102)

        {

            OneSendData3 (placeGramNum);//Lokokato manĝaĵounufoje

        }

        else if(Va == 0x0101) //Agordo paĝo

        {

            u16 ŝaltpaĝo[2] = {0x5A01, 3};

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

            {

                se (i == 0)

                {

                    Skribu_Dgus(0x3070 + i * 0x10 + 0, aktualaTempo[i] % 10);

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

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

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

                }

                alie

                {

                    Skribu_Dgus(0x3070 + i * 0x10 + 0, aktualaTempo[i] % 10);

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

                }

            }

            skribu_dgus_vp(0x0084, ŝaltpaĝo, 2);//Eniru la agordan paĝon

        }

        alie se (Va == 0x0100) //Record paĝo

        {

            u16 ŝaltpaĝo[2] = {0x5A01, 2};

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

            {

                se (i == 0)

                {

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

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

                    Skribu_Dgus(0x2000 + i * 0x10 + 4, eatFeedList[0][i] / 100 % 10);

                    Skribu_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[0][i] / 1000 % 10);

                }

                alie

                {

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

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

                }

            }

            skribu_dgus_vp(0x0084, ŝaltpaĝo, 2);//Enigu rekordan paĝon

        }

        //Record paĝo

        else if(Va == 0x0201) //Registru paĝon antaŭan paĝon

        {

            se (rigardu ManĝuCnt > 0)

            {

                rigarduManĝiCnt--;

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

                {

                    se (i == 0)

                    {

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

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

                        Skribu_Dgus(0x2000 + i * 0x10 + 4, eatFeedList[lookEatCnt][i] / 100 % 10);

                        Skribu_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[lookEatCnt][i] / 1000 % 10);

                    }

                    alie

                    {

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

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

                    }

                }

            }

        }

        else if(Va == 0x0202) //Registru paĝon sekvan paĝon

        {

            se(rigarduManĝuCnt < manĝiCnt - 1)

            {

                lookEatCnt++;

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

                {

                    se (i == 0)

                    {

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

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

                        Skribu_Dgus(0x2000 + i * 0x10 + 4, eatFeedList[lookEatCnt][i] / 100 % 10);

                        Skribu_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[lookEatCnt][i] / 1000 % 10);

                    }

                    alie

                    {

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

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

                    }

                }

            }

        }

        //Agordo paĝo

        alie se (Va == 0x0302)

        {

            se (tempoModo == 1)

            {

                timeMode = 0;

                Skribu_Dgus(0x3A12, 139);

            }

        }

        alie se (Va == 0x0303)

        {

            se (tempoModo == 0)

            {

                timeMode = 1;

                Skribu_Dgus(0x3A12, 242);

            }

        }

        alie se (Va >= 0x0304 && Va <= 0x0309)

        {

            u16 ŝaltpaĝo[2] = {0x5A01, 19};

            retropaĝo = 3;

            backNum = Va;

            setNum = timrIntervalHour[Va - 0x0304];

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

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

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

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

            skribu_dgus_vp(0x0084, ŝaltpaĝo, 2);

        }

        alie se (Va >= 0x030A && Va <= 0x030F)

        {

            u16 ŝaltpaĝo[2] = {0x5A01, 19};

            retropaĝo = 3;

            backNum = Va;

            setNum = aktualaTempo[Va - 0x030A];

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

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

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

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

            skribu_dgus_vp(0x0084, ŝaltpaĝo, 2);

        }

        //Aĝustigu datumpaĝon

        alie se (Va == 0x0400) //Konfirmu

        {

            u16 ŝaltpaĝo[2] = {0x5A01, 0x0000};

            ŝaltpaĝo[1] = malantaŭa Paĝo;

            if(backPage == 1) //Reveno al statuspaĝo

            {

                placeGramNum = setNum;

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

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

            }

            alie se (malantaŭa paĝo == 3)

            {

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

                {

                    u16 elektu = 0;

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

                    timrIntervalHour[backNum - 0x0304] = setNum;

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

                    Skribu_Dgus(0x3010 + elektu + 2, setNum / 10 % 10);

                }

                alie se (backNum >= 0x030A && backNum <= 0x030F)

                {

                    u16 elektu = 0;

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

                    aktualaTempo[backNum - 0x030A] = setNum;

                    

                    se (backNum == 0x030A)

                    {

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

                        Skribu_Dgus(0x3010 + elektu + 2, setNum / 10 % 10);

                        Skribu_Dgus (0x3010 + elektu + 4, setNum / 100 % 10);

                        Skribu_Dgus (0x3010 + elektu + 6, setNum / 1000 % 10);

                    }

                    alie

                    {

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

                        Skribu_Dgus(0x3010 + elektu + 2, setNum / 10 % 10);

                    }

                }

            }

            skribu_dgus_vp(0x0084, ŝaltpaĝo, 2);

        }

        alie se (Va == 0x0401) //Reen

        {

            u16 ŝaltpaĝo[2] = {0x5A01, 0x0000};

            ŝaltpaĝo[1] = malantaŭa Paĝo;

            skribu_dgus_vp(0x0084, ŝaltpaĝo, 2);

        }

        alie se(Va == 0x0402) //Nomera kresko

        {

            setNum++;

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

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

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

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

        }

        alie se(Va == 0x0403) //Nomera malkresko

        {

            se (aroNum > 0)

                setNum--;

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

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

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

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

        }

        

        Skribu_Dgus(0x1000, 0);

    }

}


Afiŝtempo: Sep-19-2023