[Ödüllü vaka] Akıllı Kedi Maması Kontrol Sistemi

——DWIN Geliştirici Forumundan

Bu sayımızda size DWIN Geliştirici Forumu'nun ödüllü açık kaynak vakasını tanıtacağız: Akıllı Kedi Maması Kontrol Sistemi.Mühendisler, kedi mamasının sıcaklığını, nemini ve kalan miktarını izlemek ve kedinin mama yeme kayıtlarını kaydetmek için DWIN akıllı ekranını kullandı.Ayrıca, dokunma geri bildiriminin görsel algısını geliştirmek için bir dizi mürekkep boyama stili kullanıcı arayüzünün yanı sıra parmakla dokunulduğunda mürekkep tıklama efektini benzersiz bir şekilde tasarladılar.

Giriiş:

1.UI resim malzemesi

DWIN akıllı ekran, ekran içeriğine göre önceden hazırlanması gereken resim, ses ve diğer materyallere dayalı olarak kullanıcı arayüzü gelişimini tamamlar.

asv (2)

2.Arayüz geliştirme

DGUS yazılımı, katman kaplama yoluyla UI efektini geri yükler, hazırlanan malzemeleri DGUS yazılımında eksiksiz bir resim halinde birleştirir ve ekran ve dokunma işlevlerini ayarlar.

asv (1)

3. Tıklama efektlerini ve ses efektlerini uygulayın

Dokunma konumu 51 programı aracılığıyla elde edilir, basma efekti parmağın hareketini takip eder ve tuşa eşlik eden ses efekti de elde edilir.

(1) Dokunma konum kodunu tespit edin ve ses çalın:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8 ben = 0;

 

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

    {

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

        if(Va[0] == 0x5A01)

        {

        }

        başka

        {

            kırmak;

        }

    }

    if(i != 0) //Giriş için ilk tıklama

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, oynat, 2);

    }

}

 

(2) Dokunma efekti ekranının kodu aşağıdaki gibidir:

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. Bir sonraki adım, ilgili parametreleri ekran aracılığıyla ayarlamak ve ardından kedi mamasının otomatik besleme fonksiyonunu gerçekleştirmek için verileri ESP32 aracılığıyla kedi maması kontrolörüne iletmektir.Özel kod aşağıdaki gibidir:

//Buton durumunu al

geçersiz get_key_status()

{

    int ben = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    if(Va != 0x0000)

    {

        //Sdurum sayfası

        if(Va == 0x0103) //g sayısını yerleştir

        {

            u16 geçiş sayfası[2] = {0x5A01, 19};

            setNum = placeGramNum;

            arka sayfa = 1;//Durum sayfasına geri dön

            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, geçiş sayfası, 2);

        }

        else if(Va == 0x0102)

        {

            OneSendData3(placeGramNum);//Yerkedi mamasıbir kere

        }

        else if(Va == 0x0101) //Ayar sayfası

        {

            u16 geçiş sayfası[2] = {0x5A01, 3};

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

            {

                eğer(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);

                }

                başka

                {

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

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

                }

            }

            write_dgus_vp(0x0084, geçiş sayfası, 2);//Ayarlar sayfasına giriyoruz

        }

        else if(Va == 0x0100) //Rkayıt sayfası

        {

            u16 geçiş sayfası[2] = {0x5A01, 2};

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

            {

                eğer(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);

                }

                başka

                {

                    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, geçiş sayfası, 2);//Kayıt sayfasına gir

        }

        //Rkayıt sayfası

        else if(Va == 0x0201) //Sayfayı önceki sayfaya kaydet

        {

            if(lookEatCnt > 0)

            {

                bakEatCnt--;

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

                {

                    eğer(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);

                    }

                    başka

                    {

                        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) //Sayfayı kaydet sonraki sayfa

        {

            if(lookEatCnt < eatCnt - 1)

            {

                bakEatCnt++;

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

                {

                    eğer(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);

                    }

                    başka

                    {

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

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

                    }

                }

            }

        }

        //Ayar sayfası

        else if(Va == 0x0302)

        {

            if(timeMode == 1)

            {

                zamanModu = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        else if(Va == 0x0303)

        {

            if(zamanModu == 0)

            {

                zamanModu = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

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

        {

            u16 geçiş sayfası[2] = {0x5A01, 19};

            arka sayfa = 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, geçiş sayfası, 2);

        }

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

        {

            u16 geçiş sayfası[2] = {0x5A01, 19};

            arka sayfa = 3;

            backNum = Va;

            setNum = geçerliZaman[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, geçiş sayfası, 2);

        }

        //Averi sayfasını ayarla

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

        {

            u16 geçiş sayfası[2] = {0x5A01, 0x0000};

            geçiş sayfası[1] = arka sayfa;

            if(backPage == 1) //Durum sayfasına dön

            {

                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 seç = 0;

                    seç = (backNum - 0x0304) * 0x10;

                    timrIntervalHour[backNum - 0x0304] = setNum;

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

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

                }

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

                {

                    u16 seç = 0;

                    seç = (backNum - 0x0304) * 0x10;

                    currentTime[backNum - 0x030A] = setNum;

                    

                    if(backNum == 0x030A)

                    {

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

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

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

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

                    }

                    başka

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, geçiş sayfası, 2);

        }

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

        {

            u16 geçiş sayfası[2] = {0x5A01, 0x0000};

            geçiş sayfası[1] = arka sayfa;

            write_dgus_vp(0x0084, geçiş sayfası, 2);

        }

        else if(Va == 0x0402) //Sayısal artış

        {

            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) //Sayısal azalma

        {

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

    }

}


Gönderim zamanı: Eylül-19-2023