——Fra DWIN Developer Forum
I dette nummer vil vi præsentere dig for den prisvindende open source-case fra DWIN Developer Forum: Intelligent Cat Food Control System. Ingeniører brugte DWIN-smartskærmen til at overvåge temperatur, luftfugtighed og resterende mængde kattefoder og til at gemme kattens madspiseregistreringer. De har også unikt designet et sæt blækmalingsstil UI, samt en blækklik-effekt, når den berøres af en finger, for at forbedre den visuelle opfattelse af berøringsfeedback.
Introduktion:
1.UI billedmateriale
DWIN-smartskærm fuldender UI-udvikling baseret på billeder, lyd og andre materialer skal forberedes på forhånd i henhold til skærmens indhold.
![USA (2)](https://ecdn6.globalso.com/upload/p/1355/source/2024-03/65f96bce84b7f87048.jpg)
2.Grænsefladeudvikling
DGUS-softwaren gendanner UI-effekten gennem lagoverlejring, kombinerer de forberedte materialer til et komplet billede i DGUS-softwaren og indstiller display- og berøringsfunktionerne.
![USA (1)](https://ecdn6.globalso.com/upload/p/1355/source/2024-03/65f96bd07e78a77806.jpg)
3. Implementer klikeffekter og lydeffekter
Berøringspositionen opnås gennem 51-programmet, trykeffekten følger fingerens bevægelse, og keyakkompagnement-lydeffekten opnås også.
(1) Registrer berøringsplaceringskode og afspil lyd:
void TouchDetect()
{
u16 And[3] = 0;
u8i = 0;
for(i = 0;i
{
Va[i] = Read_Dgus(0x0016 + i);
if(Va[0] == 0x5A01)
{
}
andet
{
pause;
}
}
if(i != 0) //Klik først for at komme ind
{
u16 play[2] = {0x0001, 0x4000};
touchAnimationFlag = 1;
touchAnimationCnt = 0;
touchPosX = Va[1];
touchPosY = Va[2];
write_dgus_vp(0x00A0, spil, 2);
}
}
(2) Koden til touch-effektvisning er som følger:
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. Det næste trin er at indstille de tilsvarende parametre gennem skærmen og derefter overføre dataene til kattefodercontrolleren gennem ESP32 for at realisere den automatiske fodringsfunktion af kattefoder. Den specifikke kode er som følger:
//Hent knapstatus
void get_key_status()
{
int i = 0;
//u16 Va=Read_Dgus(addr);
u16 Va=Read_Dgus(0x1000);
if(Va != 0x0000)
{
//Sskjult side
if(Va == 0x0103) //Placer antallet af g
{
u16 switchpage[2] = {0x5A01, 19};
setNum = placeGramNum;
bagside = 1; //Vend tilbage til statussiden
Write_Dgus(0x4000 + 0, sætNum % 10);
Write_Dgus(0x4000 + 2, sætNum / 10 % 10);
Write_Dgus(0x4000 + 4, sætNum / 100 % 10);
Write_Dgus(0x4000 + 6, sætNum / 1000 % 10);
write_dgus_vp(0x0084, switchpage, 2);
}
else if(Va == 0x0102)
{
OneSendData3(placeGramNum); //Placerekattemadenkelt gang
}
else if(Va == 0x0101) //Indstillingsside
{
u16 switchpage[2] = {0x5A01, 3};
for(i = 0;i
{
hvis(i == 0)
{
Write_Dgus(0x3070 + i * 0x10 + 0, aktuelTid[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, aktuelTid[i] / 10 % 10);
Write_Dgus(0x3070 + i * 0x10 + 4, aktuelTid[i] / 100 % 10);
Write_Dgus(0x3070 + i * 0x10 + 6, aktuelTid[i] / 1000 % 10);
}
andet
{
Write_Dgus(0x3070 + i * 0x10 + 0, aktuelTid[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, aktuelTid[i] / 10 % 10);
}
}
write_dgus_vp(0x0084, switchpage, 2); //Gå ind på indstillingssiden
}
else if(Va == 0x0100) //Record side
{
u16 switchpage[2] = {0x5A01, 2};
for(i = 0;i
{
hvis(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);
}
andet
{
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); //Indtast postsiden
}
//Record side
else if(Va == 0x0201) //Optag side forrige side
{
if(seEatCnt > 0)
{
lookEatCnt--;
for(i = 0;i
{
hvis(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);
}
andet
{
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) //Optag side næste side
{
if(seEatCnt
{
lookEatCnt++;
for(i = 0;i
{
hvis(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);
}
andet
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);
}
}
}
}
//Indstillingsside
andet if(Va == 0x0302)
{
if(tidstilstand == 1)
{
timeMode = 0;
Write_Dgus(0x3A12, 139);
}
}
else if(Va == 0x0303)
{
if(tidstilstand == 0)
{
timeMode = 1;
Write_Dgus(0x3A12, 242);
}
}
else if(Va >= 0x0304 && Va
{
u16 switchpage[2] = {0x5A01, 19};
bagside = 3;
backNum = And;
setNum = timrIntervalHour[Va - 0x0304];
Write_Dgus(0x4000 + 0, sætNum % 10);
Write_Dgus(0x4000 + 2, sætNum / 10 % 10);
Write_Dgus(0x4000 + 4, sætNum / 100 % 10);
Write_Dgus(0x4000 + 6, sætNum / 1000 % 10);
write_dgus_vp(0x0084, switchpage, 2);
}
else if(Va >= 0x030A && Va
{
u16 switchpage[2] = {0x5A01, 19};
bagside = 3;
backNum = And;
setNum = currentTime[Va - 0x030A];
Write_Dgus(0x4000 + 0, sætNum % 10);
Write_Dgus(0x4000 + 2, sætNum / 10 % 10);
Write_Dgus(0x4000 + 4, sætNum / 100 % 10);
Write_Dgus(0x4000 + 6, sætNum / 1000 % 10);
write_dgus_vp(0x0084, switchpage, 2);
}
//ENjuster datasiden
else if(Va == 0x0400) //Bekræfte
{
u16 switchpage[2] = {0x5A01, 0x0000};
switchpage[1] = bagside;
if(backPage == 1) //Vend tilbage til statussiden
{
placeGramNum = sætNum;
Write_Dgus(0x1140 + 0, placeGramNum % 10);
Write_Dgus(0x1140 + 2, placeGramNum / 10 % 10);
}
else if(bagside == 3)
{
if(backNum >= 0x0304 && backNum
{
u16 vælg = 0;
vælg = (tilbageNum - 0x0304) * 0x10;
timrIntervalHour[backNum - 0x0304] = setNum;
Write_Dgus(0x3010 + vælg + 0, sætNum % 10);
Write_Dgus(0x3010 + vælg + 2, sætNum / 10 % 10);
}
else if(backNum >= 0x030A && backNum
{
u16 vælg = 0;
vælg = (tilbageNum - 0x0304) * 0x10;
currentTime[backNum - 0x030A] = setNum;
if(tilbageNum == 0x030A)
{
Write_Dgus(0x3010 + vælg + 0, sætNum % 10);
Write_Dgus(0x3010 + vælg + 2, sætNum / 10 % 10);
Write_Dgus(0x3010 + vælg + 4, sætNum / 100 % 10);
Write_Dgus(0x3010 + vælg + 6, sætNum / 1000 % 10);
}
andet
{
Write_Dgus(0x3010 + vælg + 0, sætNum % 10);
Write_Dgus(0x3010 + vælg + 2, sætNum / 10 % 10);
}
}
}
write_dgus_vp(0x0084, switchpage, 2);
}
else if(Va == 0x0401) //Tilbage
{
u16 switchpage[2] = {0x5A01, 0x0000};
switchpage[1] = bagside;
write_dgus_vp(0x0084, switchpage, 2);
}
else if(Va == 0x0402) //Numerisk stigning
{
sætNum++;
Write_Dgus(0x4000 + 0, sætNum % 10);
Write_Dgus(0x4000 + 2, sætNum / 10 % 10);
Write_Dgus(0x4000 + 4, sætNum / 100 % 10);
Write_Dgus(0x4000 + 6, sætNum / 1000 % 10);
}
else if(Va == 0x0403) //Numerisk fald
{
if(sætNum > 0)
sætNum--;
Write_Dgus(0x4000 + 0, sætNum % 10);
Write_Dgus(0x4000 + 2, sætNum / 10 % 10);
Write_Dgus(0x4000 + 4, sætNum / 100 % 10);
Write_Dgus(0x4000 + 6, sætNum / 1000 % 10);
}
Write_Dgus(0x1000, 0);
}
}
Indlægstid: 19. september 2023