[الحالة الحائزة على جائزة] نظام التحكم الذكي في طعام القطط

——من منتدى مطوري DWIN

في هذا العدد، سنقدم لك حالة مفتوحة المصدر حائزة على جوائز من منتدى مطوري DWIN: نظام التحكم الذكي في طعام القطط.استخدم المهندسون شاشة DWIN الذكية لمراقبة درجة الحرارة والرطوبة والكمية المتبقية من طعام القطط، وحفظ سجلات تناول طعام القطط.كما صمموا بشكل فريد مجموعة من واجهة المستخدم لأسلوب الرسم بالحبر، بالإضافة إلى تأثير النقر بالحبر عند لمسه بإصبعك، لتعزيز الإدراك البصري لردود الفعل اللمسية.

مقدمة:

1. المواد الصورة واجهة المستخدم

تكمل شاشة DWIN الذكية تطوير واجهة المستخدم بناءً على الصور والصوت والمواد الأخرى التي يجب إعدادها مسبقًا وفقًا لمحتوى عرض الشاشة.

ايه اس في (2)

2. تطوير الواجهة

يستعيد برنامج DGUS تأثير واجهة المستخدم من خلال تراكب الطبقة، ويجمع المواد المعدة في صورة كاملة في برنامج DGUS، ويضبط وظائف العرض واللمس.

ايه اس في (1)

3. تنفيذ تأثيرات النقر والمؤثرات الصوتية

يتم الحصول على موضع اللمس من خلال برنامج 51، ويتبع تأثير الضغط حركة الإصبع، كما يتم تحقيق التأثير الصوتي المرافق للمفتاح.

(1) اكتشاف رمز موقع اللمس وتشغيل الصوت:

TouchDetect () باطلة

{

    u16 فا[3] = 0;

    u8 ط = 0;

 

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

    {

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

        إذا (فا [0] == 0x5A01)

        {

        }

        آخر

        {

            استراحة؛

        }

    }

    إذا (i ! = 0) // انقر أولاً للدخول

    {

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

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, play, 2);

    }

}

 

(2) رمز عرض تأثير اللمس هو كما يلي:

TouchStart () باطلة

{

    إذا (touchAnimationFlag == 1)

    {

        إذا (touchAnimationCnt == 0)

        {

            Write_Dgus(0x5011, touchPosX - 100);

            Write_Dgus(0x5012, touchPosY - 100);

        }

 

        Write_Dgus(0x5000, touchAnimationCnt);

        touchAnimationCnt++;

 

        إذا (touchAnimationCnt == 6)

        {

            touchAnimationFlag = 0;

            Write_Dgus(0x5011, 1024);

            Write_Dgus(0x5012, 600);

        }

    }

    

}

 

4. الخطوة التالية هي ضبط المعلمات المقابلة من خلال الشاشة، ثم نقل البيانات إلى وحدة تحكم طعام القطط من خلال ESP32 لتحقيق وظيفة التغذية التلقائية لطعام القطط.الكود المحدد هو كما يلي:

//الحصول على حالة الزر

get_key_status () باطلة

{

    كثافة العمليات ط = 0؛

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    إذا (فا! = 0x0000)

    {

        //Sصفحة تاتوس

        if(Va == 0x0103) // ضع رقم g

        {

            u16 صفحة التبديل[2] = {0x5A01, 19};

            setNum = placeGramNum;

            صفحة خلفية = 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);

        }

        وإلا إذا (Va == 0x0102)

        {

            OneSendData3(placeGramNum);//مكانطعام القطةمرة واحدة

        }

        آخر إذا (Va == 0x0101) // صفحة الإعداد

        {

            u16 صفحة التبديل[2] = {0x5A01, 3};

            ل(i = 0;i < 6;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);// أدخل إلى صفحة الإعدادات

        }

        آخر إذا (Va == 0x0100) //Rصفحة التسجيل

        {

            u16 صفحة التبديل[2] = {0x5A01, 2};

            ل(i = 0;i < 6;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) // سجل الصفحة السابقة

        {

            إذا (انظرEatCnt > 0)

            {

                lookEatCnt--;

                ل(i = 0;i < 6;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) // سجل الصفحة التالية

        {

            إذا (lookEatCnt <eatCnt - 1)

            {

                lookEatCnt++;

                ل(i = 0;i < 6;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);

                    }

                }

            }

        }

        //إعداد الصفحة

        وإلا إذا (Va == 0x0302)

        {

            إذا (وضع الوقت == 1)

            {

                وضع الوقت = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        وإلا إذا (Va == 0x0303)

        {

            إذا (وضع الوقت == 0)

            {

                وضع الوقت = 1؛

                Write_Dgus(0x3A12, 242);

            }

        }

        وإلا إذا (Va >= 0x0304 && Va <= 0x0309)

        {

            u16 صفحة التبديل[2] = {0x5A01, 19};

            صفحة خلفية = 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);

        }

        وإلا إذا (Va >= 0x030A && Va <= 0x030F)

        {

            u16 صفحة التبديل[2] = {0x5A01, 19};

            صفحة خلفية = 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صفحة بيانات التعديل

        آخر إذا (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);

            }

            وإلا إذا (backPage == 3)

            {

                إذا (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);

                }

                وإلا إذا (backNum >= 0x030A && backNum <= 0x030F)

                {

                    u16 حدد = 0;

                    حدد = (backNum - 0x0304) * 0x10؛

                    currentTime[backNum - 0x030A] = setNum;

                    

                    إذا (رقم الظهر == 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);

        }

        آخر إذا (Va == 0x0401) //خلف

        {

            u16 صفحة التبديل[2] = {0x5A01, 0x0000};

            صفحة التبديل[1] = الصفحة الخلفية;

            write_dgus_vp(0x0084, Switchpage, 2);

        }

        آخر إذا (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);

        }

        آخر إذا (Va == 0x0403) // انخفاض عددي

        {

            إذا (رقم المجموعة > 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