[Kes yang memenangi anugerah] Sistem Kawalan Makanan Kucing Pintar

——Dari Forum Pembangun DWIN

Dalam isu ini, kami akan memperkenalkan kepada anda kes sumber terbuka yang memenangi anugerah daripada Forum Pembangun DWIN: Sistem Kawalan Makanan Kucing Pintar.Jurutera menggunakan skrin pintar DWIN untuk memantau suhu, kelembapan dan baki jumlah makanan kucing, dan untuk menyimpan rekod makan makanan kucing.Mereka juga direka secara unik satu set UI gaya lukisan dakwat, serta kesan klik dakwat apabila disentuh dengan jari, untuk meningkatkan persepsi visual maklum balas sentuhan.

pengenalan:

1.bahan gambar UI

Skrin pintar DWIN melengkapkan pembangunan UI berdasarkan gambar, audio dan bahan lain perlu disediakan terlebih dahulu mengikut kandungan paparan skrin.

asv (2)

2. Pembangunan antara muka

Perisian DGUS memulihkan kesan UI melalui tindanan lapisan, menggabungkan bahan yang disediakan menjadi gambaran lengkap dalam perisian DGUS dan menetapkan fungsi paparan dan sentuhan.

asv (1)

3. Laksanakan kesan klik dan kesan bunyi

Kedudukan sentuhan diperoleh melalui program 51, kesan menekan mengikut pergerakan jari, dan kesan bunyi iringan kunci juga dicapai.

(1) Kesan kod lokasi sentuh dan mainkan audio:

batal TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

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

    {

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

        jika(Va[0] == 0x5A01)

        {

        }

        lain

        {

            pecah;

        }

    }

    if(i != 0) //Klik pertama untuk masuk

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, main, 2);

    }

}

 

(2) Kod untuk paparan kesan sentuhan adalah seperti berikut:

batal 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. Langkah seterusnya ialah menetapkan parameter yang sepadan melalui skrin, dan kemudian menghantar data kepada pengawal makanan kucing melalui ESP32 untuk merealisasikan fungsi penyusuan automatik makanan kucing.Kod khusus adalah seperti berikut:

//Dapatkan status butang

batal status_kunci_kunci()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    jika(Va != 0x0000)

    {

        //Shalaman tatus

        if(Va == 0x0103) //Letak nombor g

        {

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

            setNum = placeGramNum;

            halaman belakang = 1;//Kembali ke halaman 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);

        }

        else if(Va == 0x0102)

        {

            OneSendData3(placeGramNum);//tempatmakanan kucingsekali

        }

        else if(Va == 0x0101) //Menetapkan halaman

        {

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

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

            {

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

                }

                lain

                {

                    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);//Masukkan halaman tetapan

        }

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

        {

            halaman suis u16[2] = {0x5A01, 2};

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

            {

                jika (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);//Masukkan halaman rekod

        }

        //Rhalaman ecord

        else if(Va == 0x0201) //Rakam halaman halaman sebelumnya

        {

            jika(lookEatCnt > 0)

            {

                lookEatCnt--;

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

                {

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

                    }

                }

            }

        }

        else if(Va == 0x0202) //Rakam halaman halaman seterusnya

        {

            if(lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

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

                {

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

                    }

                }

            }

        }

        // Halaman tetapan

        else if(Va == 0x0302)

        {

            if(timeMode == 1)

            {

                Mod masa = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        else if(Va == 0x0303)

        {

            if(timeMode == 0)

            {

                Mod masa = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

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

        {

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

            halaman belakang = 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);

        }

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

        {

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

            halaman belakang = 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);

        }

        //Alaraskan halaman data

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

        {

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

            halaman suis[1] = halaman belakang;

            if(backPage == 1) //Kembali ke halaman status

            {

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

                    

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

        }

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

        {

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

            halaman suis[1] = halaman belakang;

            write_dgus_vp(0x0084, switchpage, 2);

        }

        else if(Va == 0x0402) //Peningkatan 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);

        }

        else if(Va == 0x0403) //Penurunan angka

        {

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

    }

}


Masa siaran: Sep-19-2023