[Priiswinnende saak] Intelligent Cat Food Control System

——Fan DWIN Developer Forum

Yn dit nûmer sille wy jo de priiswinnende iepen boarne-saak yntrodusearje fan it DWIN Developer Forum: Intelligent Cat Food Control System.Yngenieurs brûkten it DWIN-tûke skerm om de temperatuer, fochtigens en de oerbleaune hoemannichte katteniten te kontrolearjen, en om de itenrecords fan 'e kat te bewarjen.Se ûntworpen ek unyk in set UI foar inketskilderijstyl, lykas ek in inktklikeffekt by oanrekking troch in finger, om de fisuele waarnimming fan touchfeedback te ferbetterjen.

Ynlieding:

1.UI foto materiaal

DWIN smart skerm foltôget UI-ûntwikkeling basearre op ôfbyldings, audio en oare materialen moatte fan tefoaren wurde taret neffens de ynhâld fan it skermdisplay.

asv (2)

2.Interface ûntwikkeling

De DGUS-software herstelt it UI-effekt fia laachoverlay, kombineart de taret materialen yn in folslein byld yn 'e DGUS-software, en stelt de werjefte- en touchfunksjes yn.

asv (1)

3. Implementearje klik effekten en lûd effekten

De touchposysje wurdt krigen troch it programma 51, it drukkende effekt folget de beweging fan 'e finger, en it lûdeffekt foar toetsbegelieding wurdt ek berikt.

(1) Detect touch lokaasjekoade en spielje audio:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

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

    {

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

        if(Va[0] == 0x5A01)

        {

        }

        oars

        {

            brekke;

        }

    }

    if(i != 0) //Klik earst om yn te gean

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, boartsje, 2);

    }

}

 

(2) De koade foar werjefte fan touch-effekt is as folget:

void TouchStart()

{

    if(touchAnimationFlag == 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. De folgjende stap is om de korrespondearjende parameters troch it skerm te setten, en dan de gegevens oer te stjoeren nei de cat food controller fia ESP32 om de automatyske fiedingsfunksje fan cat food te realisearjen.De spesifike koade is as folget:

// Knopstatus krije

void get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    if(Va != 0x0000)

    {

        //Status side

        if (Va == 0x0103) // Pleats it oantal g

        {

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

            setNum = placeGramNum;

            backPage = 1;// Werom nei status side

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

        }

        oars as (Va == 0x0102)

        {

            OneSendData3(placeGramNum);//Plakkatten itenienris

        }

        else if (Va == 0x0101) // Ynstellingsside

        {

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

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

            {

                as(ik == 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);

                }

                oars

                {

                    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);// Fier de ynstellingsside yn

        }

        oars as (Va == 0x0100) //Record side

        {

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

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

            {

                as(ik == 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);

                }

                oars

                {

                    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);// Enter record side

        }

        //Record side

        else if (Va == 0x0201) // Record side foarige side

        {

            if(lookEatCnt > 0)

            {

                lookEatCnt--;

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

                {

                    as(ik == 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);

                    }

                    oars

                    {

                        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) // Record side folgjende side

        {

            if(lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

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

                {

                    as(ik == 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);

                    }

                    oars

                    {

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

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

                    }

                }

            }

        }

        // Ynstellingsside

        oars as (Va == 0x0302)

        {

            if(timeMode == 1)

            {

                timeMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        oars as (Va == 0x0303)

        {

            if(timeMode == 0)

            {

                timeMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        oars as (Va >= 0x0304 && Va <= 0x0309)

        {

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

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

        }

        oars as (Va >= 0x030A && Va <= 0x030F)

        {

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

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

        }

        //Aoanpasse gegevens side

        oars as (Va == 0x0400) //Befêstigje

        {

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

            switchpage[1] = backPage;

            if (backPage == 1) // Werom nei statusside

            {

                placeGramNum = setNum;

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

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

            }

            oars as(backPage == 3)

            {

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

                {

                    u16 selektearje = 0;

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

                    timrIntervalHour[backNum - 0x0304] = setNum;

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

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

                }

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

                {

                    u16 selektearje = 0;

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

                    currentTime[backNum - 0x030A] = setNum;

                    

                    if(backNum == 0x030A)

                    {

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

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

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

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

                    }

                    oars

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);

        }

        oars as (Va == 0x0401) //Efter

        {

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

            switchpage[1] = backPage;

            write_dgus_vp(0x0084, switchpage, 2);

        }

        else if (Va == 0x0402) //Numerike ferheging

        {

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

        }

        oars as (Va == 0x0403) //Numerike fermindering

        {

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

    }

}


Post tiid: Sep-19-2023