[Cas guardonat] Sistema intel·ligent de control d'aliments per a gats

——Del Fòrum de desenvolupadors de DWIN

En aquest número, us presentarem el premiat cas de codi obert del Fòrum de Desenvolupadors DWIN: Intelligent Cat Food Control System.Els enginyers van utilitzar la pantalla intel·ligent DWIN per controlar la temperatura, la humitat i la quantitat restant de menjar per a gats i per guardar els registres de menjar del gat.També van dissenyar de manera única un conjunt d'interfície d'usuari d'estil de pintura de tinta, així com un efecte de clic de tinta quan es toca amb un dit, per millorar la percepció visual de la retroalimentació tàctil.

Introducció:

Material d'imatge 1.UI

La pantalla intel·ligent DWIN completa el desenvolupament de la interfície d'usuari basat en imatges, àudio i altres materials que s'han de preparar amb antelació segons el contingut de la pantalla.

asv (2)

2.Desenvolupament de la interfície

El programari DGUS restaura l'efecte de la interfície d'usuari mitjançant la superposició de capes, combina els materials preparats en una imatge completa al programari DGUS i configura les funcions de pantalla i tàctil.

asv (1)

3. Implementar efectes de clic i efectes de so

La posició tàctil s'obté a través del programa 51, l'efecte de pressió segueix el moviment del dit i també s'aconsegueix l'efecte sonor d'acompanyament de la tecla.

(1) Detecta el codi d'ubicació tàctil i reprodueix àudio:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

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

    {

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

        si(Va[0] == 0x5A01)

        {

        }

        altra cosa

        {

            trencar;

        }

    }

    if(i != 0) //Primer feu clic per entrar

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, play, 2);

    }

}

 

(2) El codi per a la pantalla d'efecte tàctil és el següent:

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. El següent pas és establir els paràmetres corresponents a través de la pantalla i, a continuació, transmetre les dades al controlador de menjar per a gats mitjançant ESP32 per realitzar la funció d'alimentació automàtica de menjar per a gats.El codi específic és el següent:

//Obtén l'estat del botó

void get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    si(Va != 0x0000)

    {

        //Spàgina tatus

        if(Va == 0x0103) //Coloqueu el nombre de g

        {

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

            setNum = placeGramNum;

            pàgina enrere = 1;//Torna a la pàgina d'estat

            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, pàgina de canvi, 2);

        }

        sinó si (Va == 0x0102)

        {

            OneSendData3(placeGramNum);//Llocmenjar de gatun cop

        }

        else if(Va == 0x0101) //Configuració de la pàgina

        {

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

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

            {

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

                }

                altra cosa

                {

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

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

                }

            }

            write_dgus_vp(0x0084, pàgina de canvi, 2);//Entreu a la pàgina de configuració

        }

        sinó si (Va == 0x0100) //Rpàgina d'ecord

        {

            u16 commutació[2] = {0x5A01, 2};

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

            {

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

                }

                altra cosa

                {

                    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, pàgina de canvi, 2);//Entreu a la pàgina de registre

        }

        //Rpàgina d'ecord

        else if(Va == 0x0201) //Registra la pàgina anterior

        {

            if(miraEatCnt > 0)

            {

                miraEatCnt--;

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

                {

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

                    }

                    altra cosa

                    {

                        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) //Registra la pàgina següent

        {

            if(miraEatCnt <eatCnt - 1)

            {

                lookEatCnt++;

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

                {

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

                    }

                    altra cosa

                    {

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

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

                    }

                }

            }

        }

        // Pàgina de configuració

        sinó si (Va == 0x0302)

        {

            if(timeMode == 1)

            {

                timeMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        sinó si (Va == 0x0303)

        {

            if(timeMode == 0)

            {

                timeMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

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

        {

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

            enrerePàgina = 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, pàgina de canvi, 2);

        }

        sinó si (Va >= 0x030A && Va <= 0x030F)

        {

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

            enrerePàgina = 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, pàgina de canvi, 2);

        }

        //Aajustar la pàgina de dades

        sinó si (Va == 0x0400) //Confirmeu

        {

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

            pàgina de canvi[1] = pàgina enrere;

            if(backPage == 1) //Torna a la pàgina d'estat

            {

                placeGramNum = setNum;

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

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

            }

            else if(backPage == 3)

            {

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

                {

                    u16 seleccionar = 0;

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

                    timrIntervalHour[backNum - 0x0304] = setNum;

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

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

                }

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

                {

                    u16 seleccionar = 0;

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

                    CurrentTime[backNum - 0x030A] = setNum;

                    

                    if(backNum == 0x030A)

                    {

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

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

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

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

                    }

                    altra cosa

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, pàgina de canvi, 2);

        }

        sinó si (Va == 0x0401) //esquena

        {

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

            pàgina de canvi[1] = pàgina enrere;

            write_dgus_vp(0x0084, pàgina de canvi, 2);

        }

        else if(Va == 0x0402) //Augment numèric

        {

            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) //Disminució numèrica

        {

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

    }

}


Hora de publicació: 19-set-2023