[Bekroonde case] Intelligent Cat Food Control System

——Van het DWIN-ontwikkelaarsforum

In dit nummer introduceren we u de bekroonde open source-case van het DWIN Developer Forum: Intelligent Cat Food Control System.Ingenieurs gebruikten het slimme DWIN-scherm om de temperatuur, vochtigheid en resterende hoeveelheid kattenvoer te monitoren, en om de eetgegevens van de kat op te slaan.Ze ontwierpen ook een unieke gebruikersinterface in inktschilderstijl, evenals een inktklikeffect bij aanraking met een vinger, om de visuele perceptie van aanraakfeedback te verbeteren.

Invoering:

1.UI-beeldmateriaal

DWIN smart screen voltooit de UI-ontwikkeling op basis van afbeeldingen, audio en ander materiaal dat van tevoren moet worden voorbereid op basis van de schermweergave-inhoud.

asv (2)

2. Interface-ontwikkeling

De DGUS-software herstelt het UI-effect door middel van laagoverlay, combineert de voorbereide materialen tot een compleet beeld in de DGUS-software en stelt de weergave- en aanraakfuncties in.

asv (1)

3. Implementeer klikeffecten en geluidseffecten

De aanraakpositie wordt verkregen via het 51-programma, het drukeffect volgt de beweging van de vinger en het toetsbegeleidingsgeluidseffect wordt ook bereikt.

(1) Detecteer de aanraaklocatiecode en speel audio af:

ongeldig TouchDetect()

{

    u16 Va[3] = 0;

    u8 ik = 0;

 

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

    {

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

        als(Va[0] == 0x5A01)

        {

        }

        anders

        {

            pauze;

        }

    }

    if(i != 0) //Klik eerst om binnen te gaan

    {

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

        touchAnimatieVlag = 1;

        touchAnimatieCnt = 0;

        touchPosX = Va[1];

        aanrakingPosY = Va[2];

        write_dgus_vp(0x00A0, afspelen, 2);

    }

}

 

(2) De code voor de aanraakeffectweergave is als volgt:

ongeldig TouchStart()

{

    if(touchAnimatieVlag == 1)

    {

        als(touchAnimationCnt == 0)

        {

            Write_Dgus(0x5011, touchPosX - 100);

            Write_Dgus(0x5012, touchPosY - 100);

        }

 

        Write_Dgus(0x5000, touchAnimationCnt);

        touchAnimatieCnt++;

 

        als(touchAnimationCnt == 6)

        {

            touchAnimatieVlag = 0;

            Schrijf_Dgus(0x5011, 1024);

            Write_Dgus(0x5012, 600);

        }

    }

    

}

 

4. De volgende stap is het instellen van de overeenkomstige parameters via het scherm en het vervolgens via ESP32 verzenden van de gegevens naar de kattenvoercontroller om de automatische voedingsfunctie van kattenvoer te realiseren.De specifieke code is als volgt:

//Knopstatus ophalen

void get_key_status()

{

    int ik = 0;

    //u16 Va=Read_Dgus(adr);

    u16 Va=Read_Dgus(0x1000);

    als(Va != 0x0000)

    {

        //Status pagina

        if(Va == 0x0103) //Plaats het aantal g

        {

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

            setNum = plaatsGramNum;

            achterpagina = 1;//Terug naar statuspagina

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

        }

        anders als(Va == 0x0102)

        {

            OneSendData3(plaatsGramNum);//Plaatskattenvoereenmaal

        }

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

        {

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

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

            {

                als(ik == 0)

                {

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

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

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

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

                }

                anders

                {

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

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

                }

            }

            write_dgus_vp(0x0084, schakelpagina, 2);//Ga naar de instellingenpagina

        }

        anders als(Va == 0x0100) //Record-pagina

        {

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

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

            {

                als(ik == 0)

                {

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

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

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

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

                }

                anders

                {

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

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

                }

            }

            write_dgus_vp(0x0084, schakelpagina, 2);//Ga naar de recordpagina

        }

        //Record-pagina

        else if(Va == 0x0201) //Recordpagina vorige pagina

        {

            if(lookEatCnt > 0)

            {

                lookEatCnt--;

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

                {

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

                    }

                    anders

                    {

                        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) //Recordpagina volgende pagina

        {

            if(lookEatCnt < eetCnt - 1)

            {

                lookEatCnt++;

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

                {

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

                    }

                    anders

                    {

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

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

                    }

                }

            }

        }

        //Instellingspagina

        anders als(Va == 0x0302)

        {

            als(tijdmodus == 1)

            {

                tijdmodus = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        anders als(Va == 0x0303)

        {

            als(tijdmodus == 0)

            {

                tijdmodus = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        anders als(Va >= 0x0304 && Va <= 0x0309)

        {

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

            achterpagina = 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, schakelpagina, 2);

        }

        anders als(Va >= 0x030A && Va <= 0x030F)

        {

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

            achterpagina = 3;

            backNum = Va;

            setNum = huidigeTijd[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, schakelpagina, 2);

        }

        //Agegevenspagina aanpassen

        anders als(Va == 0x0400) //Bevestigen

        {

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

            schakelpagina[1] = achterpagina;

            if(backPage == 1) //Terug naar statuspagina

            {

                plaatsGramNum = setNum;

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

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

            }

            else if(achterpagina == 3)

            {

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

                {

                    u16 selecteren = 0;

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

                    timrIntervalHour[backNum - 0x0304] = setNum;

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

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

                }

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

                {

                    u16 selecteren = 0;

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

                    huidigeTijd[backNum - 0x030A] = setNum;

                    

                    if(backNum == 0x030A)

                    {

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

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

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

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

                    }

                    anders

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, schakelpagina, 2);

        }

        anders als(Va == 0x0401) //Rug

        {

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

            schakelpagina[1] = achterpagina;

            write_dgus_vp(0x0084, schakelpagina, 2);

        }

        else if(Va == 0x0402) //Numerieke toename

        {

            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) //Numerieke afname

        {

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

        }

        

        Schrijf_Dgus(0x1000, 0);

    }

}


Posttijd: 19 september 2023