[पुरस्कार विजेता मामला] बुद्धिमान बिल्ली भोजन नियंत्रण प्रणाली

——DWIN डेवलपर फोरम से

इस अंक में, हम आपको DWIN डेवलपर फ़ोरम: इंटेलिजेंट कैट फ़ूड कंट्रोल सिस्टम से पुरस्कार विजेता ओपन सोर्स केस से परिचित कराएँगे।इंजीनियरों ने तापमान, आर्द्रता और बिल्ली के भोजन की शेष मात्रा की निगरानी करने और बिल्ली के भोजन खाने के रिकॉर्ड को सहेजने के लिए DWIN स्मार्ट स्क्रीन का उपयोग किया।उन्होंने स्पर्श प्रतिक्रिया की दृश्य धारणा को बढ़ाने के लिए स्याही पेंटिंग शैली यूआई का एक सेट, साथ ही उंगली से छूने पर एक स्याही क्लिक प्रभाव भी डिजाइन किया है।

परिचय:

1.यूआई चित्र सामग्री

DWIN स्मार्ट स्क्रीन चित्रों, ऑडियो और अन्य सामग्रियों के आधार पर यूआई विकास को पूरा करती है, जिन्हें स्क्रीन डिस्प्ले सामग्री के अनुसार पहले से तैयार करने की आवश्यकता होती है।

एएसवी (2)

2.इंटरफ़ेस विकास

डीजीयूएस सॉफ्टवेयर लेयर ओवरले के माध्यम से यूआई प्रभाव को पुनर्स्थापित करता है, तैयार सामग्री को डीजीयूएस सॉफ्टवेयर में एक पूर्ण चित्र में जोड़ता है, और डिस्प्ले और टच फ़ंक्शन सेट करता है।

एएसवी (1)

3. क्लिक प्रभाव और ध्वनि प्रभाव लागू करें

स्पर्श स्थिति 51 प्रोग्राम के माध्यम से प्राप्त की जाती है, दबाने का प्रभाव उंगली की गति का अनुसरण करता है, और कुंजी संगत ध्वनि प्रभाव भी प्राप्त किया जाता है।

(1) स्पर्श स्थान कोड का पता लगाएं और ऑडियो चलाएं:

शून्य टचडिटेक्ट()

{

    यू16 वीए[3] = 0;

    यू8 मैं = 0;

 

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

    {

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

        यदि(Va[0] == 0x5A01)

        {

        }

        अन्य

        {

            तोड़ना;

        }

    }

    if(i != 0) //प्रवेश करने के लिए सबसे पहले क्लिक करें

    {

        यू16 प्ले[2] = {0x0001, 0x4000};

        टचएनीमेशनफ्लैग = 1;

        टचएनीमेशनसीएनटी = 0;

        TouchPosX = Va[1];

        TouchPosY = Va[2];

        राइट_डीगस_वीपी(0x00A0, प्ले, 2);

    }

}

 

(2) स्पर्श प्रभाव प्रदर्शन के लिए कोड इस प्रकार है:

शून्य टचस्टार्ट()

{

    यदि(स्पर्शएनीमेशनफ्लैग == 1)

    {

        यदि(touchAnimationCnt == 0)

        {

            Write_Dgus(0x5011, TouchPosX - 100);

            Write_Dgus(0x5012, TouchPosY - 100);

        }

 

        Write_Dgus(0x5000, TouchAnimationCnt);

        TouchAnimationCnt++;

 

        यदि(touchAnimationCnt == 6)

        {

            टचएनीमेशनफ्लैग = 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);

    यदि(Va != 0x0000)

    {

        //Sटैटस पेज

        if(Va == 0x0103) //g की संख्या रखें

        {

            यू16 स्विचपेज[2] = {0x5ए01, 19};

            सेटनम = प्लेसग्रामनम;

            बैकपेज = 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);

            राइट_डीगस_वीपी(0x0084, स्विचपेज, 2);

        }

        अन्यथा यदि (Va == 0x0102)

        {

            OneSendData3(placeGramNum);//जगहबिल्ली का खानाएक बार

        }

        अन्यथा यदि(Va == 0x0101) //सेटिंग पेज

        {

            यू16 स्विचपेज[2] = {0x5ए01, 3};

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

                }

            }

            राइट_डीगस_वीपी(0x0084, स्विचपेज, 2);//सेटिंग्स पृष्ठ दर्ज करें

        }

        अन्यथा यदि(Va == 0x0100) //Rरिकार्ड पेज

        {

            यू16 स्विचपेज[2] = {0x5ए01, 2};

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

                }

            }

            राइट_डीगस_वीपी(0x0084, स्विचपेज, 2);//रिकॉर्ड पेज दर्ज करें

        }

        //Rरिकार्ड पेज

        अन्यथा यदि (Va == 0x0201) // पृष्ठ पिछला पृष्ठ रिकॉर्ड करें

        {

            यदि(lookEatCnt > 0)

            {

                लुकईटसीएनटी--;

                for(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 == 0x0202) //अगले पृष्ठ को रिकॉर्ड करें

        {

            यदि(lookEatCnt < EatCnt - 1)

            {

                लुकईटसीएनटी++;

                for(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)

        {

            यू16 स्विचपेज[2] = {0x5ए01, 19};

            बैकपेज = 3;

            बैकनम = वीए;

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

            राइट_डीगस_वीपी(0x0084, स्विचपेज, 2);

        }

        अन्यथा यदि(Va >= 0x030A && Va <= 0x030F)

        {

            यू16 स्विचपेज[2] = {0x5ए01, 19};

            बैकपेज = 3;

            बैकनम = वीए;

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

            राइट_डीगस_वीपी(0x0084, स्विचपेज, 2);

        }

        //Aडेटा पृष्ठ समायोजित करें

        अन्यथा यदि(Va == 0x0400) //पुष्टि करना

        {

            u16 स्विचपेज[2] = {0x5A01, 0x0000};

            स्विचपेज[1] = बैकपेज;

            यदि(बैकपेज == 1) // स्थिति पृष्ठ पर लौटें

            {

                प्लेसग्रामनम = सेटनम;

                Write_Dgus(0x1140 + 0, प्लेसग्रामनम % 10);

                Write_Dgus(0x1140 + 2, प्लेसग्रामनम / 10 % 10);

            }

            अन्यथा यदि (बैकपेज == 3)

            {

                यदि(बैकनम >= 0x0304 && बैकनम <= 0x0309)

                {

                    u16 चयन = 0;

                    चुनें = (बैकनम - 0x0304) * 0x10;

                    timrIntervalHour[backNum - 0x0304] = setNum;

                    Write_Dgus(0x3010 + चुनें + 0, setNum % 10);

                    Write_Dgus(0x3010 + सेलेक्ट + 2, सेटनम / 10 % 10);

                }

                अन्यथा यदि(बैकनम >= 0x030A && बैकनम <= 0x030F)

                {

                    u16 चयन = 0;

                    चुनें = (बैकनम - 0x0304) * 0x10;

                    currentTime[backNum - 0x030A] = setNum;

                    

                    यदि(बैकनम == 0x030A)

                    {

                        Write_Dgus(0x3010 + चुनें + 0, setNum % 10);

                        Write_Dgus(0x3010 + सेलेक्ट + 2, सेटनम / 10 % 10);

                        Write_Dgus(0x3010 + चयन + 4, सेटनम / 100% 10);

                        Write_Dgus(0x3010 + चयन + 6, सेटनम / 1000 % 10);

                    }

                    अन्य

                    {

                        Write_Dgus(0x3010 + चुनें + 0, setNum % 10);

                        Write_Dgus(0x3010 + सेलेक्ट + 2, सेटनम / 10 % 10);

                    }

                }

            }

            राइट_डीगस_वीपी(0x0084, स्विचपेज, 2);

        }

        अन्यथा यदि(Va == 0x0401) //पीछे

        {

            u16 स्विचपेज[2] = {0x5A01, 0x0000};

            स्विचपेज[1] = बैकपेज;

            राइट_डीगस_वीपी(0x0084, स्विचपेज, 2);

        }

        अन्यथा यदि(Va == 0x0402) //संख्यात्मक वृद्धि

        {

            सेटनम++;

            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)

                सेटनम--;

            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