——DWIN विकासकर्ता फोरमबाट
यस अंकमा, हामी तपाईंलाई DWIN विकासकर्ता फोरम: बुद्धिमान बिरालो खाना नियन्त्रण प्रणालीबाट पुरस्कार-विजेता खुला स्रोत केस परिचय गराउनेछौं।इन्जिनियरहरूले तापमान, आर्द्रता, र बिरालोको खानाको बाँकी मात्रा निगरानी गर्न र बिरालोको खाना खाने रेकर्डहरू बचत गर्न DWIN स्मार्ट स्क्रिन प्रयोग गरे।टच फिडब्याकको भिजुअल धारणा बृद्धि गर्न तिनीहरूले अनौंठो रूपमा मसी चित्रकारी शैली UI को सेट, साथसाथै औंलाले छोएपछि मसी क्लिक प्रभाव डिजाइन गरे।
परिचय:
1.UI चित्र सामग्री
DWIN स्मार्ट स्क्रिनले तस्विर, अडियो र अन्य सामग्रीहरूमा आधारित UI विकास पूरा गर्दछ स्क्रिन डिस्प्ले सामग्री अनुसार अग्रिम तयार हुन आवश्यक छ।
2. इन्टरफेस विकास
DGUS सफ्टवेयरले लेयर ओभरले मार्फत UI प्रभावलाई पुनर्स्थापना गर्छ, DGUS सफ्टवेयरमा तयार गरिएका सामग्रीहरूलाई पूर्ण तस्विरमा मिलाउँछ, र प्रदर्शन र टच कार्यहरू सेट गर्दछ।
3. क्लिक प्रभावहरू र ध्वनि प्रभावहरू लागू गर्नुहोस्
टच स्थिति 51 कार्यक्रम मार्फत प्राप्त गरिन्छ, थिच्ने प्रभाव औंलाको आन्दोलनलाई पछ्याउँछ, र कुञ्जी संगत ध्वनि प्रभाव पनि प्राप्त हुन्छ।
(१) टच स्थान कोड पत्ता लगाउनुहोस् र अडियो प्ले गर्नुहोस्:
void TouchDetect()
{
u16 Va[3] = 0;
u8 i = 0;
(i = 0; i < 3; i++) को लागि
{
Va[i] = Read_Dgus(0x0016 + i);
यदि(Va[0] == 0x5A01)
{
}
अरू
{
ब्रेक;
}
}
if(i != 0) //प्रवेश गर्न पहिलो क्लिक गर्नुहोस्
{
u16 प्ले[2] = {0x0001, 0x4000};
टच एनिमेसन फ्ल्याग = 1;
touchAnimationCnt = 0;
touchPosX = Va[1];
touchPosY = Va[2];
write_dgus_vp(0x00A0, प्ले, 2);
}
}
(2) टच प्रभाव प्रदर्शनको लागि कोड निम्नानुसार छ:
शून्य टचस्टार्ट()
{
यदि (टच एनिमेसन फ्ल्याग == 1)
{
यदि (touchAnimationCnt == 0)
{
Write_Dgus(0x5011, touchPosX - 100);
Write_Dgus(0x5012, touchPosY - 100);
}
Write_Dgus(0x5000, touchAnimationCnt);
टच एनिमेशन सीन्ट++;
यदि (touchAnimationCnt == 6)
{
टच एनिमेसन फ्ल्याग = ०;
Write_Dgus(0x5011, 1024);
Write_Dgus(0x5012, 600);
}
}
}
4. अर्को चरण स्क्रिन मार्फत सम्बन्धित प्यारामिटरहरू सेट गर्नु हो, र त्यसपछि ESP32 मार्फत बिरालाको खानाको स्वचालित खुवाउने कार्यलाई महसुस गर्न डाटालाई बिरालाको खाना नियन्त्रकमा पठाउनुहोस्।विशिष्ट कोड निम्नानुसार छ:
// बटन स्थिति प्राप्त गर्नुहोस्
शून्य get_key_status()
{
int i = 0;
//u16 Va=Read_Dgus(addr);
u16 Va=Read_Dgus(0x1000);
यदि (Va != 0x0000)
{
//Status पृष्ठ
if(Va == 0x0103) //g को संख्या राख्नुहोस्
{
u16 switchpage[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);//स्थानबिरालोको खानाएक पटक
}
else if(Va == 0x0101) //सेटिङ पृष्ठ
{
u16 switchpage[2] = {0x5A01, 3};
(i = 0; i < 6; i++) को लागि
{
यदि (i == 0)
{
Write_Dgus(0x3070 + i * 0x10 + 0, वर्तमान समय[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, वर्तमान समय[i] / 10 % 10);
Write_Dgus(0x3070 + i * 0x10 + 4, वर्तमान समय[i] / 100 % 10);
Write_Dgus(0x3070 + i * 0x10 + 6, वर्तमान समय[i] / 1000 % 10);
}
अरू
{
Write_Dgus(0x3070 + i * 0x10 + 0, वर्तमान समय[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, वर्तमान समय[i] / 10 % 10);
}
}
write_dgus_vp(0x0084, switchpage, 2);// सेटिङ पृष्ठ प्रविष्ट गर्नुहोस्
}
अन्यथा यदि (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) //रेकर्ड पृष्ठ अघिल्लो पृष्ठ
{
यदि (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) // अर्को पृष्ठ रेकर्ड गर्नुहोस्
{
यदि (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);
}
}
}
}
// सेटिङ पृष्ठ
अन्यथा यदि (Va == 0x0302)
{
यदि (समय मोड == 1)
{
timeMode = 0;
Write_Dgus(0x3A12, 139);
}
}
अन्यथा यदि (Va == 0x0303)
{
यदि (समयमोड == ०)
{
timeMode = 1;
Write_Dgus(0x3A12, 242);
}
}
अन्यथा यदि (Va >= 0x0304 && Va <= 0x0309)
{
u16 switchpage[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 switchpage[2] = {0x5A01, 19};
ब्याकपेज = 3;
backNum = Va;
setNum = वर्तमान समय [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);
}
//Adjust डाटा पृष्ठ
अन्यथा यदि (Va == 0x0400) //पुष्टि गर्नुहोस्
{
u16 switchpage[2] = {0x5A01, 0x0000};
switchpage[1] = ब्याकपेज;
यदि (ब्याकपेज == 1) // स्थिति पृष्ठमा फर्कनुहोस्
{
placeGramNum = setNum;
Write_Dgus(0x1140 + 0, placeGramNum % 10);
Write_Dgus(0x1140 + 2, placeGramNum / 10 % 10);
}
अन्यथा यदि (ब्याकपेज == 3)
{
यदि (backNum >= 0x0304 & backNum <= 0x0309)
{
u16 चयन = 0;
चयन = (backNum - 0x0304) * 0x10;
timrIntervalHour [backNum - 0x0304] = setNum;
Write_Dgus(0x3010 + चयन + 0, setNum % 10);
Write_Dgus(0x3010 + चयन + 2, setNum / 10 % 10);
}
अन्यथा यदि (backNum >= 0x030A && backNum <= 0x030F)
{
u16 चयन = 0;
चयन = (backNum - 0x0304) * 0x10;
वर्तमान समय [backNum - 0x030A] = setNum;
यदि (backNum == 0x030A)
{
Write_Dgus(0x3010 + चयन + 0, setNum % 10);
Write_Dgus(0x3010 + चयन + 2, setNum / 10 % 10);
Write_Dgus(0x3010 + चयन + 4, setNum / 100 % 10);
Write_Dgus(0x3010 + चयन + 6, setNum / 1000 % 10);
}
अरू
{
Write_Dgus(0x3010 + चयन + 0, setNum % 10);
Write_Dgus(0x3010 + चयन + 2, setNum / 10 % 10);
}
}
}
write_dgus_vp(0x0084, switchpage, 2);
}
अन्यथा यदि (Va == 0x0401) //पछाडि
{
u16 switchpage[2] = {0x5A01, 0x0000};
switchpage[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) // संख्यात्मक घटाइ
{
यदि (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