[Kasus anu meunang pangajén] Sistem Kontrol Pangan Ucing calakan

——Ti DWIN Forum pamekar

Dina masalah ieu, kami bakal ngenalkeun ka anjeun kasus open source anu meunang pangajén ti DWIN Developer Forum: Intelligent Cat Food Control System.Insinyur ngagunakeun layar pinter DWIN pikeun ngawas suhu, kalembaban, sareng jumlah sésana dahareun ucing, sareng nyimpen catetan tuangeun tuangeun ucing.Éta ogé dirancang unik sakumpulan UI gaya lukisan tinta, kitu ogé pangaruh klik tinta nalika keuna ku ramo, pikeun ningkatkeun persepsi visual ngeunaan eupan balik touch.

bubuka:

1.bahan gambar UI

Layar pinter DWIN ngalengkepan pamekaran UI dumasar kana gambar, audio sareng bahan sanésna kedah disiapkeun sateuacanna dumasar kana eusi tampilan layar.

asv (2)

2. Pangwangunan panganteur

Software DGUS malikkeun éfék UI ngaliwatan lapisan overlay, ngagabungkeun bahan disusun kana gambar lengkep dina software DGUS, tur nyetel tampilan na touch fungsi.

asv (1)

3. Laksanakeun épék klik sareng épék sora

Posisi rampa dimeunangkeun ngaliwatan program 51, pangaruh mencét nuturkeun gerakan ramo, sarta pangaruh sora iringan konci ogé kahontal.

(1) Deteksi kode lokasi touch sareng muter audio:

batal TouchDetec()

{

    u16 Va[3] = 0;

    u8 abdi = 0;

 

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

    {

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

        lamun (Va[0] == 0x5A01)

        {

        }

        lain

        {

            megatkeun;

        }

    }

    lamun (abdi! = 0) // Klik munggaran pikeun ngasupkeun

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, muter, 2);

    }

}

 

(2) Kodeu pikeun tampilan éfék touch nyaéta kieu:

batal TouchStart()

{

    lamun (touchAnimationFlag == 1)

    {

        lamun (touchAnimationCnt == 0)

        {

            Write_Dgus(0x5011, touchPosX - 100);

            Write_Dgus(0x5012, touchPosY - 100);

        }

 

        Write_Dgus(0x5000, touchAnimationCnt);

        touchAnimationCnt ++;

 

        lamun (touchAnimationCnt == 6)

        {

            touchAnimationFlag = 0;

            Write_Dgus(0x5011, 1024);

            Write_Dgus(0x5012, 600);

        }

    }

    

}

 

4. Lengkah saterusna nyaéta pikeun ngeset parameter pakait ngaliwatan layar, lajeng ngirimkeun data ka controller dahareun ucing ngaliwatan ESP32 pikeun ngawujudkeun fungsi dahar otomatis dahareun ucing.Kode husus nyaéta kieu:

// Kéngingkeun status tombol

batal get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    lamun (Va! = 0x0000)

    {

        //Skaca tatus

        lamun (Va == 0x0103) //Teundeun jumlah g

        {

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

            setNum = placeGramNum;

            backPage = 1;//Balik deui ka kaca status

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

        }

        lain lamun (Va == 0x0102)

        {

            OneSendData3(placeGramNum);//Tempatkadaharan ucingsakali

        }

        lain lamun (Va == 0x0101) // Nyetél kaca

        {

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

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

            {

                lamun (i == 0)

                {

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

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

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

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

                }

                lain

                {

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

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

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);//Asupkeun kaca setélan

        }

        lain lamun (Va == 0x0100) //Rkaca ecord

        {

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

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

            {

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

                }

                lain

                {

                    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, switchpage, 2);//Asupkeun kaca catetan

        }

        //Rkaca ecord

        lain lamun (Va == 0x0201) // Rékam kaca kaca saméméhna

        {

            lamun (lookEatCnt > 0)

            {

                lookEatCnt--;

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

                {

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

                    }

                    lain

                    {

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

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

                    }

                }

            }

        }

        lain lamun (Va == 0x0202) // Rékam kaca hareup kaca

        {

            lamun (lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

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

                {

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

                    }

                    lain

                    {

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

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

                    }

                }

            }

        }

        //Setélan kaca

        lain lamun (Va == 0x0302)

        {

            lamun (timeMode == 1)

            {

                TimeMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        lain lamun (Va == 0x0303)

        {

            lamun (timeMode == 0)

            {

                TimeMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        lain lamun (Va >= 0x0304 && Va <= 0x0309)

        {

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

        }

        lain lamun (Va >= 0x030A && Va <= 0x030F)

        {

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

        }

        //Anyaluyukeun kaca data

        lain lamun (Va == 0x0400) //Konpirmasi

        {

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

            switchpage [1] = backPage;

            lamun (backPage == 1) // Balik deui ka kaca status

            {

                placeGramNum = setNum;

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

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

            }

            lain lamun (backPage == 3)

            {

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

                {

                    u16 pilih = 0;

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

                    timrIntervalHour[backNum - 0x0304] = setNum;

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

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

                }

                lain lamun (backNum>= 0x030A && backNum <= 0x030F)

                {

                    u16 pilih = 0;

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

                    currentTime [backNum - 0x030A] = setNum;

                    

                    lamun (backNum == 0x030A)

                    {

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

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

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

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

                    }

                    lain

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);

        }

        lain lamun (Va == 0x0401) //Balik deui

        {

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

            switchpage [1] = backPage;

            write_dgus_vp(0x0084, switchpage, 2);

        }

        lain lamun (Va == 0x0402) // Kanaékan angka

        {

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

        }

        lain lamun (Va == 0x0403) // Numeris panurunan

        {

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

    }

}


waktos pos: Sep-19-2023