[Kasus pemenang penghargaan] Sistem Kontrol Makanan Kucing Cerdas

——Dari Forum Pengembang DWIN

Dalam edisi ini, kami akan memperkenalkan kepada Anda kasus sumber terbuka pemenang penghargaan dari Forum Pengembang DWIN: Sistem Kontrol Makanan Kucing Cerdas.Para insinyur menggunakan layar pintar DWIN untuk memantau suhu, kelembapan, dan jumlah sisa makanan kucing, serta menyimpan catatan makan makanan kucing.Mereka juga secara unik merancang serangkaian UI gaya lukisan tinta, serta efek klik tinta saat disentuh oleh jari, untuk meningkatkan persepsi visual dari umpan balik sentuhan.

Perkenalan:

1. Materi gambar UI

Layar pintar DWIN melengkapi pengembangan UI berdasarkan gambar, audio, dan materi lainnya yang perlu dipersiapkan terlebih dahulu sesuai dengan konten tampilan layar.

asv (2)

2. Pengembangan antarmuka

Perangkat lunak DGUS mengembalikan efek UI melalui overlay lapisan, menggabungkan materi yang disiapkan menjadi gambar lengkap dalam perangkat lunak DGUS, dan mengatur fungsi tampilan dan sentuhan.

sebagaiv (1)

3. Menerapkan efek klik dan efek suara

Posisi sentuhan diperoleh melalui program 51, efek penekanan mengikuti gerakan jari, dan efek suara pengiring tuts juga diperoleh.

(1) Deteksi kode lokasi sentuh dan putar audio:

batalkan Deteksi Sentuh()

{

    u16 Va[3] = 0;

    u8 saya = 0;

 

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

    {

        Va[i] = Baca_Dgus(0x0016 + saya);

        jika(Va[0] == 0x5A01)

        {

        }

        kalau tidak

        {

            merusak;

        }

    }

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

    {

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

        sentuhBendera Animasi = 1;

        sentuhAnimationCnt = 0;

        sentuhPosX = Va[1];

        sentuhPosY = Va[2];

        write_dgus_vp(0x00A0, putar, 2);

    }

}

 

(2) Kode tampilan efek sentuh adalah sebagai berikut:

batalkan TouchStart()

{

    jika(sentuhAnimationFlag == 1)

    {

        jika(sentuhAnimationCnt == 0)

        {

            Write_Dgus(0x5011, sentuhPosX - 100);

            Write_Dgus(0x5012, sentuhPosY - 100);

        }

 

        Write_Dgus(0x5000, sentuhAnimationCnt);

        sentuhAnimasiCnt++;

 

        jika(sentuhAnimationCnt == 6)

        {

            sentuhAnimationFlag = 0;

            Tulis_Dgus(0x5011, 1024);

            Tulis_Dgus(0x5012, 600);

        }

    }

    

}

 

4. Langkah selanjutnya adalah mengatur parameter yang sesuai melalui layar, dan kemudian mengirimkan data ke pengontrol makanan kucing melalui ESP32 untuk mewujudkan fungsi pemberian makanan kucing secara otomatis.Kode spesifiknya adalah sebagai berikut:

//Dapatkan status tombol

batal get_key_status()

{

    ke dalam saya = 0;

    //u16 Va=Baca_Dgus(addr);

    u16 Va=Baca_Dgus(0x1000);

    jika(Va != 0x0000)

    {

        //Shalaman tato

        if(Va == 0x0103) //Tempatkan nomor g

        {

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

            setNum = tempatGramNum;

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

        }

        lain jika(Va == 0x0102)

        {

            OneSendData3(tempatGramNum);//Tempatmakanan kucingsekali

        }

        else if(Va == 0x0101) //Halaman pengaturan

        {

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

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

            {

                jika(saya == 0)

                {

                    Write_Dgus(0x3070 + i * 0x10 + 0, Waktu saat ini[i] % 10);

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

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

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

                }

                kalau tidak

                {

                    Write_Dgus(0x3070 + i * 0x10 + 0, Waktu saat ini[i] % 10);

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

                }

            }

            write_dgus_vp(0x0084, halaman peralihan, 2);//Masuk ke halaman pengaturan

        }

        lain jika(Va == 0x0100) //Rhalaman data

        {

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

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

            {

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

                }

                kalau tidak

                {

                    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, halaman peralihan, 2);//Masuk ke halaman rekaman

        }

        //Rhalaman data

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

        {

            jika(lihatMakanCnt > 0)

            {

                lihatMakanCnt--;

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

                {

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

                    }

                    kalau tidak

                    {

                        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) //Rekam halaman halaman berikutnya

        {

            jika(lihatMakanCnt < makanCnt - 1)

            {

                lihatEatCnt++;

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

                {

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

                    }

                    kalau tidak

                    {

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

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

                    }

                }

            }

        }

        //Halaman pengaturan

        lain jika(Va == 0x0302)

        {

            jika(Mode Waktu == 1)

            {

                Mode waktu = 0;

                Tulis_Dgus(0x3A12, 139);

            }

        }

        lain jika(Va == 0x0303)

        {

            jika(Mode Waktu == 0)

            {

                Mode waktu = 1;

                Tulis_Dgus(0x3A12, 242);

            }

        }

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

        {

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

            Halaman Belakang = 3;

            nomor belakang = Va;

            setNum = timrIntervalJam[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, halaman peralihan, 2);

        }

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

        {

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

            Halaman Belakang = 3;

            nomor belakang = Va;

            setNum = Waktu saat ini[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, halaman peralihan, 2);

        }

        //Asesuaikan halaman data

        lain jika(Va == 0x0400) //Mengonfirmasi

        {

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

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

            }

            lain jika(Halaman Belakang == 3)

            {

                jika(angka belakang >= 0x0304 && angka belakang <= 0x0309)

                {

                    u16 pilih = 0;

                    pilih = (Nomor Belakang - 0x0304) * 0x10;

                    timrIntervalHour[backNum - 0x0304] = setNum;

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

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

                }

                lain jika(angka belakang >= 0x030A && angka belakang <= 0x030F)

                {

                    u16 pilih = 0;

                    pilih = (Nomor Belakang - 0x0304) * 0x10;

                    Waktu saat ini[Nomor Belakang - 0x030A] = setNum;

                    

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

                    }

                    kalau tidak

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, halaman peralihan, 2);

        }

        lain jika(Va == 0x0401) //Kembali

        {

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

            switchpage[1] = halaman belakang;

            write_dgus_vp(0x0084, halaman peralihan, 2);

        }

        else if(Va == 0x0402) //Peningkatan numerik

        {

            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(jumlah set > 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);

        }

        

        Tulis_Dgus(0x1000, 0);

    }

}


Waktu posting: 19 Sep-2023