[Kasus sing menang penghargaan] Sistem Kontrol Pangan Kucing Cerdas

——Saka DWIN Developer Forum

Ing masalah iki, kita bakal ngenalake sampeyan kasus sumber terbuka sing menang penghargaan saka Forum Pangembang DWIN: Sistem Kontrol Pangan Kucing Cerdas.Insinyur nggunakake layar pinter DWIN kanggo ngawasi suhu, kelembapan, lan jumlah panganan kucing sing isih ana, lan kanggo nyimpen cathetan mangan panganan kucing.Dheweke uga ngrancang unik UI gaya lukisan tinta, uga efek klik tinta nalika disentuh driji, kanggo nambah persepsi visual babagan umpan balik tutul.

Pambuka:

1. Materi gambar UI

Layar pinter DWIN ngrampungake pangembangan UI adhedhasar gambar, audio lan bahan liyane sing kudu disiapake luwih dhisik miturut konten tampilan layar.

asv (2)

2. Pangembangan antarmuka

Piranti lunak DGUS mulihake efek UI liwat lapisan, nggabungake bahan sing disiapake dadi gambar lengkap ing piranti lunak DGUS, lan nyetel fungsi tampilan lan tutul.

asv (1)

3. Ngleksanakake efek klik lan efek swara

Posisi tutul dipikolehi liwat program 51, efek mencet ngetutake gerakan driji, lan efek swara iringan tombol uga entuk.

(1) Ndeteksi kode lokasi tutul lan muter audio:

void TouchDetec()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

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

    {

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

        yen(Va[0] == 0x5A01)

        {

        }

        liyane

        {

            putus;

        }

    }

    yen (i! = 0) // Klik pisanan kanggo ngetik

    {

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

        tutulAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, muter, 2);

    }

}

 

(2) Kode kanggo tampilan efek tutul kaya ing ngisor iki:

void TouchStart()

{

    if(touchAnimationFlag == 1)

    {

        yen (touchAnimationCnt == 0)

        {

            Write_Dgus(0x5011, touchPosX - 100);

            Write_Dgus(0x5012, touchPosY - 100);

        }

 

        Write_Dgus(0x5000, touchAnimationCnt);

        tutulAnimationCnt++;

 

        yen(touchAnimationCnt == 6)

        {

            tutulAnimationFlag = 0;

            Write_Dgus(0x5011, 1024);

            Write_Dgus(0x5012, 600);

        }

    }

    

}

 

4. Langkah sabanjure kanggo nyetel paramèter sing cocog liwat layar, lan banjur ngirim data menyang kontrol pangan kucing liwat ESP32 kanggo éling fungsi dipakani otomatis pangan kucing.Kode spesifik kaya ing ngisor iki:

//Entuk status tombol

void get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    yen (Va ! = 0x0000)

    {

        //Skaca tatu

        yen (Va == 0x0103) // Selehake nomer g

        {

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

            setNum = placeGramNum;

            backPage = 1;// Bali menyang 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);

        }

        liya yen (Va == 0x0102)

        {

            OneSendData3(placeGramNum);//Panggonanpanganan kucingsapisan

        }

        liya yen (Va == 0x0101) //Setelan kaca

        {

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

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

            {

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

                }

                liyane

                {

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

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

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);// Ketik kaca setelan

        }

        else if(Va == 0x0100) //Rkaca ecord

        {

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

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

            {

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

                }

                liyane

                {

                    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);//Ketik kaca rekaman

        }

        //Rkaca ecord

        liya yen (Va == 0x0201) // Rekam kaca sadurunge kaca

        {

            yen (lookEatCnt > 0)

            {

                lookEatCnt--;

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

                {

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

                    }

                    liyane

                    {

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

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

                    }

                }

            }

        }

        liya yen (Va == 0x0202) // Rekam kaca kaca sabanjuré

        {

            yen (lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

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

                {

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

                    }

                    liyane

                    {

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

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

                    }

                }

            }

        }

        //Setelan kaca

        liya yen (Va == 0x0302)

        {

            if(timeMode == 1)

            {

                wektuMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        liya yen (Va == 0x0303)

        {

            yen (timeMode == 0)

            {

                wektuMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        liya yen (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);

        }

        liya yen (Va >= 0x030A && Va <= 0x030F)

        {

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

            backPage = 3;

            backNum = Va;

            setNum = wektu saiki [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);

        }

        //Angatur kaca data

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

        {

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

            switchpage[1] = backPage;

            yen (backPage == 1) // Bali menyang kaca status

            {

                placeGramNum = setNum;

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

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

            }

            else if(backPage == 3)

            {

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

                }

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

                {

                    u16 pilih = 0;

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

                    currentTime[backNum - 0x030A] = setNum;

                    

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

                    }

                    liyane

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);

        }

        liya yen (Va == 0x0401) //Mbalik

        {

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

            switchpage[1] = backPage;

            write_dgus_vp(0x0084, switchpage, 2);

        }

        liya yen (Va == 0x0402) // Tambah 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);

        }

        liya yen (Va == 0x0403) //Numerical nyuda

        {

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

    }

}


Wektu kirim: Sep-19-2023