—— DWIN ডেভেলপার ফোরাম থেকে
এই ইস্যুতে, আমরা আপনাকে DWIN ডেভেলপার ফোরাম থেকে পুরস্কারপ্রাপ্ত ওপেন সোর্স কেস: ইন্টেলিজেন্ট ক্যাট ফুড কন্ট্রোল সিস্টেমের সাথে পরিচয় করিয়ে দেব।প্রকৌশলীরা তাপমাত্রা, আর্দ্রতা এবং বিড়ালের খাবারের অবশিষ্ট পরিমাণ নিরীক্ষণ করতে এবং বিড়ালের খাবার খাওয়ার রেকর্ড সংরক্ষণ করতে DWIN স্মার্ট স্ক্রিন ব্যবহার করেছিলেন।তারা অনন্যভাবে কালি পেইন্টিং শৈলী UI এর একটি সেট ডিজাইন করেছে, সেইসাথে একটি আঙুল দ্বারা স্পর্শ করার সময় একটি কালি ক্লিক প্রভাব, স্পর্শ প্রতিক্রিয়ার চাক্ষুষ উপলব্ধি উন্নত করতে।
ভূমিকা:
1.UI ছবির উপাদান
DWIN স্মার্ট স্ক্রিন ছবি, অডিও এবং অন্যান্য উপকরণের উপর ভিত্তি করে UI ডেভেলপমেন্ট সম্পন্ন করে স্ক্রীন ডিসপ্লের বিষয়বস্তু অনুযায়ী আগে থেকেই প্রস্তুত করা প্রয়োজন।
2. ইন্টারফেস উন্নয়ন
DGUS সফ্টওয়্যার লেয়ার ওভারলে এর মাধ্যমে UI ইফেক্ট পুনরুদ্ধার করে, DGUS সফ্টওয়্যারে একটি সম্পূর্ণ ছবিতে প্রস্তুত উপকরণগুলিকে একত্রিত করে এবং প্রদর্শন এবং স্পর্শ ফাংশন সেট করে।
3. ক্লিক প্রভাব এবং শব্দ প্রভাব প্রয়োগ করুন
স্পর্শ অবস্থানটি 51 প্রোগ্রামের মাধ্যমে প্রাপ্ত হয়, প্রেসিং প্রভাব আঙুলের নড়াচড়া অনুসরণ করে এবং কী সহগামী শব্দ প্রভাবও অর্জন করা হয়।
(1) স্পর্শ অবস্থান কোড সনাক্ত করুন এবং অডিও চালান:
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 play[2] = {0x0001, 0x4000};
touchAnimationFlag = 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++;
যদি (touchAnimationCnt == 6)
{
touchAnimationFlag = 0;
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, সুইচপেজ, 2);
}
অন্যথায় যদি (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, বর্তমান সময়[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, সুইচপেজ, 2);//সেটিংস পৃষ্ঠায় প্রবেশ করুন
}
অন্যথায় যদি (Va == 0x0100) //Record পৃষ্ঠা
{
u16 সুইচপেজ[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, সুইচপেজ, 2);// রেকর্ড পৃষ্ঠা লিখুন
}
//Record পৃষ্ঠা
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)
{
যদি (টাইমমোড == 0)
{
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, সুইচপেজ, 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, সুইচপেজ, 2);
}
//Aডাটা পেজ ঠিক করুন
অন্যথায় যদি (Va == 0x0400) //নিশ্চিত করুন
{
u16 সুইচপেজ[2] = {0x5A01, 0x0000};
switchpage[1] = ব্যাকপেজ;
if(backPage == 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, সুইচপেজ, 2);
}
অন্যথায় যদি (Va == 0x0401) //পেছনে
{
u16 সুইচপেজ[2] = {0x5A01, 0x0000};
switchpage[1] = ব্যাকপেজ;
write_dgus_vp(0x0084, সুইচপেজ, 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