[Palkittu tapaus] Älykäs kissanruoan ohjausjärjestelmä

——DWIN-kehittäjäfoorumista

Tässä numerossa esittelemme sinulle DWIN Developer Forumin palkitun avoimen lähdekoodin tapauksen: Intelligent Cat Food Control System.Insinöörit käyttivät DWIN-älynäyttöä valvomaan lämpötilaa, kosteutta ja kissanruoan jäljellä olevaa määrää sekä tallentamaan kissan syömistietoja.He suunnittelivat myös yksilöllisesti mustemaalaustyylin käyttöliittymäsarjan sekä musteen napsautustehosteen, kun niitä kosketetaan sormella, mikä parantaa kosketuspalautteen visuaalista havaintoa.

Esittely:

1.UI-kuvamateriaali

DWIN-älynäyttö viimeistelee käyttöliittymäkehityksen kuviin, ääniin ja muihin materiaaleihin, jotka on valmisteltava etukäteen näytön näytön sisällön mukaan.

asv (2)

2. Käyttöliittymän kehittäminen

DGUS-ohjelmisto palauttaa käyttöliittymävaikutelman kerrosten päällekkäisyyden avulla, yhdistää valmistetut materiaalit kokonaiskuvaksi DGUS-ohjelmistossa ja asettaa näyttö- ja kosketustoiminnot.

asv (1)

3. Toteuta napsautustehosteita ja äänitehosteita

Kosketusasento saadaan 51-ohjelman kautta, puristusvaikutus seuraa sormen liikettä, ja saavutetaan myös näppäinsäestysääniefekti.

(1) Tunnista kosketuspaikan koodi ja toista ääni:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8i = 0;

 

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

    {

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

        jos(Va[0] == 0x5A01)

        {

        }

        muu

        {

            tauko;

        }

    }

    if(i != 0) //Syötä napsauttamalla ensin

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, toisto, 2);

    }

}

 

(2) Kosketustehostenäytön koodi on seuraava:

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. Seuraava vaihe on asettaa vastaavat parametrit näytön kautta ja sitten lähettää tiedot kissanruokaohjaimelle ESP32:n kautta kissanruoan automaattisen ruokintatoiminnon toteuttamiseksi.Tarkka koodi on seuraava:

//Hae painikkeen tila

void get_key_status()

{

    int i = 0;

    //u16 Va=Lue_Dgus(addr);

    u16 Va=Lue_Dgus(0x1000);

    jos(Va != 0x0000)

    {

        //Status sivu

        if(Va == 0x0103) //Aseta g:n luku

        {

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

            setNum = placeGramNum;

            takasivu = 1;//Palaa tilasivulle

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

        }

        muuten jos(Va == 0x0102)

        {

            OneSendData3(paikkaGramNum);//Paikkakissanruokakerran

        }

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

        {

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

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

            {

                jos(i ​​== 0)

                {

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

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

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

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

                }

                muu

                {

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

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

                }

            }

            write_dgus_vp(0x0084, vaihtosivu, 2);//Siirry asetussivulle

        }

        else if(Va == 0x0100) //Rennätyssivu

        {

            u16-vaihtosivu[2] = {0x5A01, 2};

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

            {

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

                }

                muu

                {

                    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, vaihtosivu, 2);//Siirry tietuesivulle

        }

        //Rennätyssivu

        else if(Va == 0x0201) //Tallenna sivu edellinen sivu

        {

            if(lookEatCnt > 0)

            {

                lookEatCnt--;

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

                {

                    jos(i ​​== 0)

                    {

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

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

                        Write_Dgus(0x2000 + i * 0x10 + 4, eatFeedList[lookSyöCnt][i] / 100 % 10);

                        Write_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[lookSyöCnt][i] / 1000 % 10);

                    }

                    muu

                    {

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

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

                    }

                }

            }

        }

        else if(Va == 0x0202) //Tallenna sivu seuraavalle sivulle

        {

            if(katsoSyöCnt <syöCnt - 1)

            {

                lookEatCnt++;

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

                {

                    jos(i ​​== 0)

                    {

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

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

                        Write_Dgus(0x2000 + i * 0x10 + 4, eatFeedList[lookSyöCnt][i] / 100 % 10);

                        Write_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[lookSyöCnt][i] / 1000 % 10);

                    }

                    muu

                    {

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

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

                    }

                }

            }

        }

        //Asetussivu

        muuten jos(Va == 0x0302)

        {

            jos(aikatila == 1)

            {

                timeMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        muuten jos(Va == 0x0303)

        {

            jos(aikatila == 0)

            {

                timeMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

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

        {

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

            takasivu = 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, vaihtosivu, 2);

        }

        muuten jos(Va >= 0x030A && Va <= 0x030F)

        {

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

            takasivu = 3;

            backNum = Va;

            setNum = nykyinenAika[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, vaihtosivu, 2);

        }

        //Asäädä datasivua

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

        {

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

            vaihtosivu[1] = takasivu;

            if(backPage == 1) //Palaa tilasivulle

            {

                placeGramNum = setNum;

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

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

            }

            muuten jos(takasivu == 3)

            {

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

                {

                    u16 select = 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 select = 0;

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

                    nykyinenAika[backNum - 0x030A] = setNum;

                    

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

                    }

                    muu

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, vaihtosivu, 2);

        }

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

        {

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

            vaihtosivu[1] = takasivu;

            write_dgus_vp(0x0084, vaihtosivu, 2);

        }

        else if(Va == 0x0402) //Numeerinen lisäys

        {

            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) //Numeerinen vähennys

        {

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

    }

}


Postitusaika: 19.9.2023