[Caso premiado] Sistema intelixente de control de alimentos para gatos

——Do DWIN Developer Forum

Neste número, presentarémosche o caso de código aberto premiado do DWIN Developer Forum: Intelligent Cat Food Control System.Os enxeñeiros utilizaron a pantalla intelixente DWIN para controlar a temperatura, a humidade e a cantidade restante de comida para gatos, e para gardar os rexistros de comida do gato.Tamén deseñaron de xeito exclusivo un conxunto de IU de estilo de pintura de tinta, así como un efecto de clic de tinta cando se toca cun dedo, para mellorar a percepción visual dos comentarios táctiles.

Introdución:

material de imaxe 1.UI

A pantalla intelixente DWIN completa o desenvolvemento da interface de usuario baseado en imaxes, audio e outros materiais que deben prepararse con antelación segundo o contido da pantalla.

asv (2)

2.Desenvolvemento da interface

O software DGUS restaura o efecto da interface de usuario mediante a superposición de capas, combina os materiais preparados nunha imaxe completa no software DGUS e configura as funcións de visualización e táctil.

asv (1)

3. Implementa efectos de clic e efectos de son

A posición táctil obtense a través do programa 51, o efecto de presión segue o movemento do dedo e tamén se consegue o efecto sonoro de acompañamento da tecla.

(1) Detecta o código de localización táctil e reproduce audio:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

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

    {

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

        se(Va[0] == 0x5A01)

        {

        }

        outra cousa

        {

            romper;

        }

    }

    if(i != 0) //Primeiro fai clic para entrar

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, xogar, 2);

    }

}

 

(2) O código para a visualización do efecto táctil é o seguinte:

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. O seguinte paso é establecer os parámetros correspondentes a través da pantalla e, a continuación, transmitir os datos ao controlador de comida para gatos a través de ESP32 para realizar a función de alimentación automática da comida para gatos.O código específico é o seguinte:

//Obter o estado do botón

void get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    se (Va != 0x0000)

    {

        //Spáxina de tatus

        if(Va == 0x0103) //Coloca o número de g

        {

            u16 páxina de conmutación[2] = {0x5A01, 19};

            setNum = placeGramNum;

            Páxina atrás = 1;//Volver á páxina de estado

            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áxina de conmutación, 2);

        }

        senón se (Va == 0x0102)

        {

            OneSendData3(placeGramNum);//Lugarcomida para gatosunha vez

        }

        else if(Va == 0x0101) //Configuración da páxina

        {

            u16 páxina de conmutación[2] = {0x5A01, 3};

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

            {

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

                }

                outra cousa

                {

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

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

                }

            }

            write_dgus_vp(0x0084, páxina de conmutación, 2);//Introduza a páxina de configuración

        }

        senón se (Va == 0x0100) //Rpáxina ecord

        {

            u16 páxina de conmutación[2] = {0x5A01, 2};

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

            {

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

                }

                outra cousa

                {

                    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áxina de conmutación, 2);//Introduza a páxina de rexistro

        }

        //Rpáxina ecord

        else if(Va == 0x0201) //Grabar páxina anterior páxina

        {

            if (lookEatCnt > 0)

            {

                miraComeCnt--;

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

                {

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

                    }

                    outra cousa

                    {

                        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) //Grabar páxina páxina seguinte

        {

            if(lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

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

                {

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

                    }

                    outra cousa

                    {

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

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

                    }

                }

            }

        }

        //Páxina de configuración

        senón se (Va == 0x0302)

        {

            if (modo de tempo == 1)

            {

                timeMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        senón se (Va == 0x0303)

        {

            if (modo de tempo == 0)

            {

                timeMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        senón se (Va >= 0x0304 && Va <= 0x0309)

        {

            u16 páxina de conmutación[2] = {0x5A01, 19};

            Páxina atrás = 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áxina de conmutación, 2);

        }

        senón se (Va >= 0x030A && Va <= 0x030F)

        {

            u16 páxina de conmutación[2] = {0x5A01, 19};

            Páxina atrás = 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áxina de conmutación, 2);

        }

        //Aaxustar a páxina de datos

        senón se (Va == 0x0400) //Confirmar

        {

            u16 páxina de conmutación[2] = {0x5A01, 0x0000};

            cambiar páxina[1] = Páxina atrás;

            if(backPage == 1) //Volver á páxina de estado

            {

                placeGramNum = setNum;

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

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

            }

            else if(backpage == 3)

            {

                if(número de atrás >= 0x0304 e&Número de atrás <= 0x0309)

                {

                    u16 seleccionar = 0;

                    seleccionar = (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;

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

                    }

                    outra cousa

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, páxina de conmutación, 2);

        }

        senón se (Va == 0x0401) //De volta

        {

            u16 páxina de conmutación[2] = {0x5A01, 0x0000};

            cambiar páxina[1] = Páxina atrás;

            write_dgus_vp(0x0084, páxina de conmutación, 2);

        }

        else if(Va == 0x0402) //Aumento numérico

        {

            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ón 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ón: 19-09-2023