[پرونده برنده جایزه] سیستم کنترل هوشمند غذای گربه

——از انجمن توسعه دهندگان DWIN

در این شماره، کیس منبع باز برنده جایزه از انجمن توسعه دهندگان DWIN: سیستم هوشمند کنترل غذای گربه را به شما معرفی می کنیم.مهندسان از صفحه نمایش هوشمند DWIN برای نظارت بر دما، رطوبت و مقدار باقیمانده غذای گربه و ذخیره سوابق غذا خوردن گربه استفاده کردند.آن‌ها همچنین مجموعه‌ای از رابط کاربری سبک نقاشی جوهر را به‌طور منحصربه‌فرد طراحی کردند، و همچنین اثر کلیک جوهر هنگام لمس انگشت، برای افزایش درک بصری بازخورد لمسی.

معرفی:

1.UI مواد تصویر

صفحه نمایش هوشمند DWIN توسعه رابط کاربری را بر اساس تصاویر، صدا و سایر مواد تکمیل می کند که باید از قبل با توجه به محتوای نمایش صفحه آماده شوند.

asv (2)

2. توسعه رابط

نرم افزار DGUS جلوه UI را از طریق لایه لایه بازیابی می کند، مواد آماده شده را در یک تصویر کامل در نرم افزار DGUS ترکیب می کند و عملکردهای نمایش و لمس را تنظیم می کند.

asv (1)

3. افکت های کلیکی و جلوه های صوتی را پیاده سازی کنید

موقعیت لمس از طریق برنامه 51 به دست می آید، افکت فشار دادن به دنبال حرکت انگشت، و افکت صدای همراه کلید نیز به دست می آید.

(1) شناسایی کد مکان لمسی و پخش صدا:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

    برای (i = 0;i <3;i++)

    {

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

        if (Va[0] == 0x5A01)

        {

        }

        دیگر

        {

            زنگ تفريح؛

        }

    }

    if(i != 0) //برای ورود ابتدا کلیک کنید

    {

        u16 play[2] = {0x0001، 0x4000}؛

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, play, 2);

    }

}

 

(2) کد نمایش افکت لمسی به شرح زیر است:

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. مرحله بعدی این است که پارامترهای مربوطه را از طریق صفحه تنظیم کنید و سپس داده ها را از طریق ESP32 به کنترل کننده غذای گربه منتقل کنید تا عملکرد تغذیه خودکار غذای گربه را متوجه شوید.کد خاص به شرح زیر است:

//دریافت وضعیت دکمه

void get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    if (Va != 0x0000)

    {

        //Sصفحه tatus

        if(Va == 0x0103) //تعداد g را قرار دهید

        {

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

            setNum = placeGramNum;

            BackPage = 1;//بازگشت به صفحه وضعیت

            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);//محلغذای گربهیک بار

        }

        else if(Va == 0x0101) //صفحه تنظیم

        {

            صفحه سوئیچ u16[2] = {0x5A01, 3};

            برای (i = 0;i <6;i++)

            {

                اگر (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);

                }

                دیگر

                {

                    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);// وارد صفحه تنظیمات شوید

        }

        else if(Va == 0x0100) //Rصفحه ضبط

        {

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

            برای (i = 0;i <6;i++)

            {

                اگر (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)؛

                }

                دیگر

                {

                    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);// وارد صفحه رکورد شوید

        }

        //Rصفحه ضبط

        else if(Va == 0x0201) //صفحه قبلی را ضبط کنید

        {

            if (lookEatCnt > 0)

            {

                lookEatCnt--;

                برای (i = 0;i <6;i++)

                {

                    اگر (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);

                    }

                    دیگر

                    {

                        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) //صفحه بعدی را ضبط کنید

        {

            if(lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

                برای (i = 0;i <6;i++)

                {

                    اگر (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);

                    }

                    دیگر

                    {

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

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

                    }

                }

            }

        }

        //صفحه تنظیمات

        else if (Va == 0x0302)

        {

            if (timeMode == 1)

            {

                timeMode = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        else if (Va == 0x0303)

        {

            if (timeMode == 0)

            {

                timeMode = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

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

        }

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

        {

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

            BackPage = 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);

        }

        //Aتنظیم صفحه داده

        else if(Va == 0x0400) //تایید

        {

            صفحه سوئیچ u16[2] = {0x5A01، 0x0000}؛

            سوئیچ پیج[1] = صفحه پشتی.

            if(backPage == 1) //بازگشت به صفحه وضعیت

            {

                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 انتخاب = 0;

                    انتخاب = (BackNum - 0x0304) * 0x10;

                    timrIntervalHour[BackNum - 0x0304] = setNum;

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

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

                }

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

                {

                    u16 انتخاب = 0;

                    انتخاب = (BackNum - 0x0304) * 0x10;

                    CurrentTime[BackNum - 0x030A] = setNum;

                    

                    if (BackNum == 0x030A)

                    {

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

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

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

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

                    }

                    دیگر

                    {

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

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

                    }

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);

        }

        else if(Va == 0x0401) //بازگشت

        {

            صفحه سوئیچ u16[2] = {0x5A01، 0x0000}؛

            سوئیچ پیج[1] = صفحه پشتی.

            write_dgus_vp(0x0084, switchpage, 2);

        }

        else if(Va == 0x0402) //افزایش عددی

        {

            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) //کاهش عددی

        {

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

    }

}


زمان ارسال: سپتامبر 19-2023