——Fan DWIN Developer Forum
Yn dit nûmer sille wy jo de priiswinnende iepen boarne-saak yntrodusearje fan it DWIN Developer Forum: Intelligent Cat Food Control System.Yngenieurs brûkten it DWIN-tûke skerm om de temperatuer, fochtigens en de oerbleaune hoemannichte katteniten te kontrolearjen, en om de itenrecords fan 'e kat te bewarjen.Se ûntworpen ek unyk in set UI foar inketskilderijstyl, lykas ek in inktklikeffekt by oanrekking troch in finger, om de fisuele waarnimming fan touchfeedback te ferbetterjen.
Ynlieding:
1.UI foto materiaal
DWIN smart skerm foltôget UI-ûntwikkeling basearre op ôfbyldings, audio en oare materialen moatte fan tefoaren wurde taret neffens de ynhâld fan it skermdisplay.
2.Interface ûntwikkeling
De DGUS-software herstelt it UI-effekt fia laachoverlay, kombineart de taret materialen yn in folslein byld yn 'e DGUS-software, en stelt de werjefte- en touchfunksjes yn.
3. Implementearje klik effekten en lûd effekten
De touchposysje wurdt krigen troch it programma 51, it drukkende effekt folget de beweging fan 'e finger, en it lûdeffekt foar toetsbegelieding wurdt ek berikt.
(1) Detect touch lokaasjekoade en spielje audio:
void TouchDetect()
{
u16 Va[3] = 0;
u8 i = 0;
foar(i = 0;i < 3;i++)
{
Va[i] = Read_Dgus(0x0016 + i);
if(Va[0] == 0x5A01)
{
}
oars
{
brekke;
}
}
if(i != 0) //Klik earst om yn te gean
{
u16 boartsje[2] = {0x0001, 0x4000};
touchAnimationFlag = 1;
touchAnimationCnt = 0;
touchPosX = Va[1];
touchPosY = Va[2];
write_dgus_vp(0x00A0, boartsje, 2);
}
}
(2) De koade foar werjefte fan touch-effekt is as folget:
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. De folgjende stap is om de korrespondearjende parameters troch it skerm te setten, en dan de gegevens oer te stjoeren nei de cat food controller fia ESP32 om de automatyske fiedingsfunksje fan cat food te realisearjen.De spesifike koade is as folget:
// Knopstatus krije
void get_key_status()
{
int i = 0;
//u16 Va=Read_Dgus(addr);
u16 Va=Read_Dgus(0x1000);
if(Va != 0x0000)
{
//Status side
if (Va == 0x0103) // Pleats it oantal g
{
u16 switchpage[2] = {0x5A01, 19};
setNum = placeGramNum;
backPage = 1;// Werom nei status side
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);
}
oars as (Va == 0x0102)
{
OneSendData3(placeGramNum);//Plakkatten itenienris
}
else if (Va == 0x0101) // Ynstellingsside
{
u16 switchpage[2] = {0x5A01, 3};
foar(i = 0;i < 6;i++)
{
as(ik == 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);
}
oars
{
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);// Fier de ynstellingsside yn
}
oars as (Va == 0x0100) //Record side
{
u16 switchpage[2] = {0x5A01, 2};
foar(i = 0;i < 6;i++)
{
as(ik == 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);
}
oars
{
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);// Enter record side
}
//Record side
else if (Va == 0x0201) // Record side foarige side
{
if(lookEatCnt > 0)
{
lookEatCnt--;
foar(i = 0;i < 6;i++)
{
as(ik == 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);
}
oars
{
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) // Record side folgjende side
{
if(lookEatCnt < eatCnt - 1)
{
lookEatCnt++;
foar(i = 0;i < 6;i++)
{
as(ik == 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);
}
oars
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);
}
}
}
}
// Ynstellingsside
oars as (Va == 0x0302)
{
if(timeMode == 1)
{
timeMode = 0;
Write_Dgus(0x3A12, 139);
}
}
oars as (Va == 0x0303)
{
if(timeMode == 0)
{
timeMode = 1;
Write_Dgus(0x3A12, 242);
}
}
oars as (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);
}
oars as (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);
}
//Aoanpasse gegevens side
oars as (Va == 0x0400) //Befêstigje
{
u16 switchpage[2] = {0x5A01, 0x0000};
switchpage[1] = backPage;
if (backPage == 1) // Werom nei statusside
{
placeGramNum = setNum;
Write_Dgus(0x1140 + 0, placeGramNum % 10);
Write_Dgus(0x1140 + 2, placeGramNum / 10 % 10);
}
oars as(backPage == 3)
{
if(backNum >= 0x0304 && backNum <= 0x0309)
{
u16 selektearje = 0;
selektearje = (backNum - 0x0304) * 0x10;
timrIntervalHour[backNum - 0x0304] = setNum;
Write_Dgus(0x3010 + selektearje + 0, setNum % 10);
Write_Dgus(0x3010 + selektearje + 2, setNum / 10 % 10);
}
else if (backNum >= 0x030A && backNum <= 0x030F)
{
u16 selektearje = 0;
selektearje = (backNum - 0x0304) * 0x10;
currentTime[backNum - 0x030A] = setNum;
if(backNum == 0x030A)
{
Write_Dgus(0x3010 + selektearje + 0, setNum % 10);
Write_Dgus(0x3010 + selektearje + 2, setNum / 10 % 10);
Write_Dgus(0x3010 + selektearje + 4, setNum / 100 % 10);
Write_Dgus(0x3010 + selektearje + 6, setNum / 1000 % 10);
}
oars
{
Write_Dgus(0x3010 + selektearje + 0, setNum % 10);
Write_Dgus(0x3010 + selektearje + 2, setNum / 10 % 10);
}
}
}
write_dgus_vp(0x0084, switchpage, 2);
}
oars as (Va == 0x0401) //Efter
{
u16 switchpage[2] = {0x5A01, 0x0000};
switchpage[1] = backPage;
write_dgus_vp(0x0084, switchpage, 2);
}
else if (Va == 0x0402) //Numerike ferheging
{
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);
}
oars as (Va == 0x0403) //Numerike fermindering
{
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);
}
}
Post tiid: Sep-19-2023