[Mükafat qazanan qutu] Ağıllı Pişik Qidasına Nəzarət Sistemi

——DWIN Developer Forumundan

Bu buraxılışda biz sizə DWIN Developer Forumundan mükafat qazanmış açıq mənbə işi təqdim edəcəyik: Ağıllı Pişik Qidasına Nəzarət Sistemi.Mühəndislər pişik yeminin temperaturunu, rütubətini və qalan miqdarını izləmək və pişiyin yemək yemək qeydlərini saxlamaq üçün DWIN smart ekranından istifadə ediblər.Onlar həmçinin toxunma rəyinin vizual qavranılmasını artırmaq üçün mürəkkəb rəsm üslubu UI dəstini, eləcə də barmaqla toxunduqda mürəkkəb klik effektini unikal şəkildə tərtib etdilər.

Giriş:

1.UI şəkil materialı

DWIN smart ekranı şəkillər, audio və ekranın məzmununa uyğun olaraq əvvəlcədən hazırlanmalı olan digər materiallar əsasında UI inkişafını tamamlayır.

asv (2)

2. İnterfeys inkişafı

DGUS proqramı təbəqə örtüyü vasitəsilə UI effektini bərpa edir, hazırlanmış materialları DGUS proqramında tam təsvirdə birləşdirir, ekran və toxunma funksiyalarını təyin edir.

asv (1)

3. Klik effektləri və səs effektlərini həyata keçirin

Toxunma mövqeyi 51 proqramı vasitəsilə əldə edilir, basma effekti barmağın hərəkətini izləyir və əsas müşayiət səs effekti də əldə edilir.

(1) Toxunma yeri kodunu aşkar edin və səsi səsləndirin:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

    üçün(i = 0;i < 3;i++)

    {

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

        əgər(Va[0] == 0x5A01)

        {

        }

        başqa

        {

            fasilə;

        }

    }

    if(i != 0) //Daxil olmaq üçün birinci klikləyin

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, oyun, 2);

    }

}

 

(2) Toxunma effekti ekranı üçün kod aşağıdakı kimidir:

TouchStart-ı ləğv edin()

{

    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. Növbəti addım müvafiq parametrləri ekran vasitəsilə təyin etmək və sonra pişik qidasının avtomatik qidalanma funksiyasını həyata keçirmək üçün məlumatları ESP32 vasitəsilə pişik qidası nəzarətçisinə ötürməkdir.Xüsusi kod aşağıdakı kimidir:

//Düymə statusunu əldə edin

get_key_statusunu ləğv edin()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    əgər(Va != 0x0000)

    {

        //Status səhifəsi

        if(Va == 0x0103) //g sayını yerləşdirin

        {

            u16 keçid səhifəsi[2] = {0x5A01, 19};

            setNum = placeGramNum;

            arxa səhifə = 1;//Status səhifəsinə qayı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, keçid səhifəsi, 2);

        }

        başqa əgər (Va == 0x0102)

        {

            OneSendData3(placeGramNum);//yerpişik yemibir dəfə

        }

        else if(Va == 0x0101) //Parametrlər səhifəsi

        {

            u16 keçid səhifəsi[2] = {0x5A01, 3};

            üçün(i = 0;i < 6;i++)

            {

                əgər (i == 0)

                {

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

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

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

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

                }

                başqa

                {

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

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

                }

            }

            write_dgus_vp(0x0084, keçid səhifəsi, 2);//Parametrlər səhifəsinə daxil olun

        }

        başqa əgər (Va == 0x0100) //Rekord səhifəsi

        {

            u16 keçid səhifəsi[2] = {0x5A01, 2};

            üçün(i = 0;i < 6;i++)

            {

                əgər (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şqa

                {

                    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, keçid səhifəsi, 2);//Qeyd səhifəsinə daxil olun

        }

        //Rekord səhifəsi

        else if(Va == 0x0201) //Səhifəni qeyd edin əvvəlki səhifə

        {

            if(lookEatCnt > 0)

            {

                lookEatCnt--;

                üçün(i = 0;i < 6;i++)

                {

                    əgər (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şqa

                    {

                        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) //Növbəti səhifəni qeyd edin

        {

            if(lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

                üçün(i = 0;i < 6;i++)

                {

                    əgər (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şqa

                    {

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

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

                    }

                }

            }

        }

        // Səhifənin qurulması

        başqa əgər (Va == 0x0302)

        {

            if(zaman rejimi == 1)

            {

                timeMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        başqa əgər (Va == 0x0303)

        {

            əgər (zaman rejimi == 0)

            {

                timeMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        başqa if(Va >= 0x0304 && Va <= 0x0309)

        {

            u16 keçid səhifəsi[2] = {0x5A01, 19};

            arxa səhifə = 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, keçid səhifəsi, 2);

        }

        başqa əgər(Va >= 0x030A && Va <= 0x030F)

        {

            u16 keçid səhifəsi[2] = {0x5A01, 19};

            arxa səhifə = 3;

            backNum = Va;

            setNum = cari vaxt[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, keçid səhifəsi, 2);

        }

        //Aməlumat səhifəsini tənzimləyin

        başqa əgər (Va == 0x0400) //Təsdiq edin

        {

            u16 keçid səhifəsi[2] = {0x5A01, 0x0000};

            keçid səhifəsi [1] = arxa səhifə;

            if(backPage == 1) //Status səhifəsinə qayıdın

            {

                placeGramNum = setNum;

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

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

            }

            başqa əgər (arxa səhifə == 3)

            {

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

                {

                    u16 seçin = 0;

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

                    timrIntervalHour[backNum - 0x0304] = setNum;

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

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

                }

                başqa əgər (geri Num >= 0x030A && geri Num <= 0x030F)

                {

                    u16 seçin = 0;

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

                    cariTime[backNum - 0x030A] = setNum;

                    

                    əgər (geri Num == 0x030A)

                    {

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

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

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

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

                    }

                    başqa

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, keçid səhifəsi, 2);

        }

        başqa if(Va == 0x0401) //Geri

        {

            u16 keçid səhifəsi[2] = {0x5A01, 0x0000};

            keçid səhifəsi [1] = arxa səhifə;

            write_dgus_vp(0x0084, keçid səhifəsi, 2);

        }

        else if(Va == 0x0402) //Ədəd artım

        {

            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) //Ədəd 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öndərmə vaxtı: 19 sentyabr 2023-cü il