[Apdovanotas atvejis] Išmanioji kačių ėdalo valdymo sistema

——Iš DWIN kūrėjų forumo

Šiame numeryje pristatysime apdovanojimus pelniusį atvirojo kodo atvejį iš DWIN kūrėjų forumo: intelektualią kačių maisto valdymo sistemą.Inžinieriai naudojo DWIN išmanųjį ekraną, kad stebėtų temperatūrą, drėgmę ir likusį kačių maisto kiekį bei išsaugotų kačių maisto valgymo įrašus.Jie taip pat unikaliai sukūrė dažymo rašalu stiliaus vartotojo sąsają, taip pat rašalo paspaudimo efektą palietus pirštu, kad pagerintų vizualinį prisilietimo grįžtamojo ryšio suvokimą.

Įvadas:

1.UI vaizdo medžiaga

DWIN išmanusis ekranas užbaigia vartotojo sąsajos kūrimą pagal paveikslėlius, garsą ir kitą medžiagą, kurią reikia paruošti iš anksto pagal ekrano rodymo turinį.

asv (2)

2.Sąsajų kūrimas

DGUS programinė įranga atkuria vartotojo sąsajos efektą per sluoksnio perdengimą, sujungia paruoštas medžiagas į visą vaizdą DGUS programinėje įrangoje ir nustato ekrano ir lietimo funkcijas.

asv (1)

3. Įdiekite paspaudimo efektus ir garso efektus

Prisilietimo padėtis gaunama per 51 programą, spaudimo efektas seka piršto judesį, taip pat pasiekiamas klavišų akompanimento garso efektas.

(1) Aptikti prisilietimo vietos kodą ir paleisti garsą:

tuščias TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

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

    {

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

        if(Va[0] == 0x5A01)

        {

        }

        Kitas

        {

            pertrauka;

        }

    }

    if(i != 0) //Pirmą kartą spustelėkite, kad įeitumėte

    {

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

        TouchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, žaisti, 2);

    }

}

 

(2) Lietimo efekto ekrano kodas yra toks:

negalioja 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. Kitas žingsnis – ekrane nustatyti atitinkamus parametrus ir perduoti duomenis į kačių maisto valdiklį per ESP32, kad būtų galima realizuoti automatinio kačių maisto šėrimo funkciją.Konkretus kodas yra toks:

//Gauti mygtuko būseną

negalioja get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    if(Va != 0x0000)

    {

        //Status puslapis

        if(Va == 0x0103) //Padėkite g skaičių

        {

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

            setNum = placeGramNum;

            backPage = 1;//Grįžti į būsenos puslapį

            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, perjungimo puslapis, 2);

        }

        kitaip jei(Va == 0x0102)

        {

            OneSendData3(placeGramNum);//VietaKatės maistaskartą

        }

        else if(Va == 0x0101) //Nustatymų puslapis

        {

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

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

            {

                jei(i == 0)

                {

                    Write_Dgus(0x3070 + i * 0x10 + 0, srovės laikas[i] % 10);

                    Write_Dgus(0x3070 + i * 0x10 + 2, srovės laikas[i] / 10 % 10);

                    Write_Dgus(0x3070 + i * 0x10 + 4, srovės laikas[i] / 100 % 10);

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

                }

                Kitas

                {

                    Write_Dgus(0x3070 + i * 0x10 + 0, srovės laikas[i] % 10);

                    Write_Dgus(0x3070 + i * 0x10 + 2, srovės laikas[i] / 10 % 10);

                }

            }

            write_dgus_vp(0x0084, perjungimo puslapis, 2);//Įeikite į nustatymų puslapį

        }

        else if(Va == 0x0100) //Record puslapis

        {

            u16 perjungimo puslapis[2] = {0x5A01, 2};

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

            {

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

                }

                Kitas

                {

                    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, perjungimo puslapis, 2);//Įeikite į įrašų puslapį

        }

        //Record puslapis

        else if(Va == 0x0201) //Įrašyti ankstesnį puslapį

        {

            if(lookEatCnt > 0)

            {

                lookEatCnt--;

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

                {

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

                    }

                    Kitas

                    {

                        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) //Įrašyti kitą puslapį

        {

            if(LookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

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

                {

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

                    }

                    Kitas

                    {

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

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

                    }

                }

            }

        }

        //Nustatymų puslapis

        kitaip jei(Va == 0x0302)

        {

            jei(laiko režimas == 1)

            {

                timeMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        kitaip jei(Va == 0x0303)

        {

            if(laiko režimas == 0)

            {

                timeMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

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

        {

            u16 perjungimo puslapis[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, perjungimo puslapis, 2);

        }

        kitu atveju, jei(Va >= 0x030A && Va <= 0x030F)

        {

            u16 perjungimo puslapis[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, perjungimo puslapis, 2);

        }

        //Akoreguoti duomenų puslapį

        else if(Va == 0x0400) //Patvirtinti

        {

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

            switchpage[1] = atgalinis puslapis;

            if(backPage == 1) //Grįžti į būsenos puslapį

            {

                placeGramNum = setNum;

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

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

            }

            kitaip jei(galinis puslapis == 3)

            {

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

                {

                    u16 pasirinkti = 0;

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

                    timrIntervalHour[backNum - 0x0304] = setNum;

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

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

                }

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

                {

                    u16 pasirinkti = 0;

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

                    currentTime[backNum - 0x030A] = setNum;

                    

                    if(atgalNum == 0x030A)

                    {

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

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

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

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

                    }

                    Kitas

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, perjungimo puslapis, 2);

        }

        else if(Va == 0x0401) //Atgal

        {

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

            switchpage[1] = atgalinis puslapis;

            write_dgus_vp(0x0084, perjungimo puslapis, 2);

        }

        else if(Va == 0x0402) //Skaičių padidėjimas

        {

            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) //Skaičių mažinimas

        {

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

    }

}


Paskelbimo laikas: 2023-09-19