——Van DWIN-ontwikkelaarsforum
In hierdie uitgawe sal ons die bekroonde oopbron-geval van die DWIN-ontwikkelaarsforum: Intelligente Cat Food Control System aan u bekendstel.Ingenieurs het die DWIN-slimskerm gebruik om die temperatuur, humiditeit en oorblywende hoeveelheid katkos te monitor, en om die kat se kos-eetrekords te stoor.Hulle het ook 'n stel inkverfstyl-UI, sowel as 'n inkklik-effek wanneer dit deur 'n vinger aangeraak word, uniek ontwerp om die visuele persepsie van aanrakingterugvoer te verbeter.
Inleiding:
1.UI-prentmateriaal
DWIN-slimskerm voltooi UI-ontwikkeling gebaseer op foto's, klank en ander materiaal moet vooraf voorberei word volgens die skermvertoningsinhoud.
2.Interface ontwikkeling
Die DGUS-sagteware herstel die UI-effek deur laagoorleg, kombineer die voorbereide materiaal in 'n volledige prentjie in die DGUS-sagteware, en stel die vertoning en aanraakfunksies in.
3. Implementeer klik-effekte en klankeffekte
Die aanraakposisie word deur die 51-program verkry, die druk-effek volg die beweging van die vinger, en die klankeffek van die sleutelbegeleiding word ook bereik.
(1) Bespeur raakliggingkode en speel oudio:
void TouchDetect()
{
u16 Va[3] = 0;
u8 i = 0;
vir(i = 0;i < 3;i++)
{
Va[i] = Lees_Dgus(0x0016 + i);
if(Va[0] == 0x5A01)
{
}
anders
{
breek;
}
}
if(i != 0) //Klik eers om in te voer
{
u16 speel[2] = {0x0001, 0x4000};
touchAnimationFlag = 1;
touchAnimationCnt = 0;
touchPosX = Va[1];
touchPosY = Va[2];
write_dgus_vp(0x00A0, speel, 2);
}
}
(2) Die kode vir aanraakeffekvertoning is soos volg:
nietig 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. Die volgende stap is om die ooreenstemmende parameters deur die skerm te stel, en dan die data na die katvoedselbeheerder deur ESP32 oor te dra om die outomatiese voedingsfunksie van katkos te realiseer.Die spesifieke kode is soos volg:
//Kry knoppiestatus
nietig get_key_status()
{
int i = 0;
//u16 Va=Read_Dgus(addr);
u16 Va=Read_Dgus(0x1000);
if(Va != 0x0000)
{
//Status bladsy
if(Va == 0x0103) //Plaas die getal g
{
u16 skakelbladsy[2] = {0x5A01, 19};
setNum = plekGramNum;
agterblad = 1;//Keer terug na statusbladsy
Write_Dgus(0x4000 + 0, stelNum % 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, skakelbladsy, 2);
}
anders as (Va == 0x0102)
{
OneSendData3(plekGramNum);//Plekkatkoseen keer
}
anders if(Va == 0x0101) //Instellingsbladsy
{
u16 skakelbladsy[2] = {0x5A01, 3};
vir(i = 0;i < 6;i++)
{
as(i == 0)
{
Write_Dgus(0x3070 + i * 0x10 + 0, huidige Tyd[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, huidige Tyd[i] / 10 % 10);
Write_Dgus(0x3070 + i * 0x10 + 4, huidige Tyd[i] / 100 % 10);
Write_Dgus(0x3070 + i * 0x10 + 6, huidige Tyd[i] / 1000 % 10);
}
anders
{
Write_Dgus(0x3070 + i * 0x10 + 0, huidige Tyd[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, huidige Tyd[i] / 10 % 10);
}
}
write_dgus_vp(0x0084, skakelbladsy, 2);//Voer die instellingsbladsy in
}
anders as(Va == 0x0100) //Rrekord bladsy
{
u16 skakelbladsy[2] = {0x5A01, 2};
vir(i = 0;i < 6;i++)
{
as(i == 0)
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[0][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eetFeedList[0][i] / 10 % 10);
Write_Dgus(0x2000 + i * 0x10 + 4, eetFeedList[0][i] / 100 % 10);
Write_Dgus(0x2000 + i * 0x10 + 6, eetFeedList[0][i] / 1000 % 10);
}
anders
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[0][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eetFeedList[0][i] / 10 % 10);
}
}
write_dgus_vp(0x0084, skakelbladsy, 2);//Voer rekordbladsy in
}
//Rrekord bladsy
anders as (Va == 0x0201) // Teken bladsy vorige bladsy op
{
if (kykEatCnt > 0)
{
kykEatCnt--;
vir(i = 0;i < 6;i++)
{
as(i == 0)
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eetFeedList[lookEatCnt][i] / 10 % 10);
Write_Dgus(0x2000 + i * 0x10 + 4, eetFeedList[lookEatCnt][i] / 100 % 10);
Write_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[lookEatCnt][i] / 1000 % 10);
}
anders
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eetFeedList[lookEatCnt][i] / 10 % 10);
}
}
}
}
anders as (Va == 0x0202) // Teken bladsy volgende bladsy op
{
if(lookEatCnt < eatCnt - 1)
{
kykEatCnt++;
vir(i = 0;i < 6;i++)
{
as(i == 0)
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eetFeedList[lookEatCnt][i] / 10 % 10);
Write_Dgus(0x2000 + i * 0x10 + 4, eetFeedList[lookEatCnt][i] / 100 % 10);
Write_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[lookEatCnt][i] / 1000 % 10);
}
anders
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eetFeedList[lookEatCnt][i] / 10 % 10);
}
}
}
}
//Stel bladsy
anders as (Va == 0x0302)
{
if(tydmodus == 1)
{
tydmodus = 0;
Write_Dgus(0x3A12, 139);
}
}
anders as (Va == 0x0303)
{
if(tydmodus == 0)
{
tydmodus = 1;
Write_Dgus(0x3A12, 242);
}
}
anders as (Va >= 0x0304 && Va <= 0x0309)
{
u16 skakelbladsy[2] = {0x5A01, 19};
agterblad = 3;
backNum = Va;
setNum = timrIntervalHour[Va - 0x0304];
Write_Dgus(0x4000 + 0, stelNum % 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, skakelbladsy, 2);
}
anders as (Va >= 0x030A && Va <= 0x030F)
{
u16 skakelbladsy[2] = {0x5A01, 19};
agterblad = 3;
backNum = Va;
setNum = huidige Tyd[Va - 0x030A];
Write_Dgus(0x4000 + 0, stelNum % 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, skakelbladsy, 2);
}
//Apas databladsy aan
anders as(Va == 0x0400) //Bevestig
{
u16 skakelbladsy[2] = {0x5A01, 0x0000};
skakelbladsy[1] = agterblad;
if(backPage == 1) //Keer terug na statusbladsy
{
placeGramNum = stelNum;
Write_Dgus(0x1140 + 0, plekGramNum % 10);
Write_Dgus(0x1140 + 2, plekGramNum / 10 % 10);
}
anders as (agterbladsy == 3)
{
if(backNum >= 0x0304 && backNum <= 0x0309)
{
u16 kies = 0;
kies = (terugNum - 0x0304) * 0x10;
timrIntervalHour[terugNum - 0x0304] = stelNum;
Write_Dgus(0x3010 + kies + 0, stelNum % 10);
Write_Dgus(0x3010 + kies + 2, setNum / 10 % 10);
}
anders as (terugNum >= 0x030A && terugNum <= 0x030F)
{
u16 kies = 0;
kies = (terugNum - 0x0304) * 0x10;
huidige Tyd[terugNum - 0x030A] = stelNum;
if(terugNum == 0x030A)
{
Write_Dgus(0x3010 + kies + 0, stelNum % 10);
Write_Dgus(0x3010 + kies + 2, setNum / 10 % 10);
Write_Dgus(0x3010 + kies + 4, setNum / 100 % 10);
Write_Dgus(0x3010 + kies + 6, setNum / 1000 % 10);
}
anders
{
Write_Dgus(0x3010 + kies + 0, stelNum % 10);
Write_Dgus(0x3010 + kies + 2, setNum / 10 % 10);
}
}
}
write_dgus_vp(0x0084, skakelbladsy, 2);
}
anders as(Va == 0x0401) //Terug
{
u16 skakelbladsy[2] = {0x5A01, 0x0000};
skakelbladsy[1] = agterblad;
write_dgus_vp(0x0084, skakelbladsy, 2);
}
anders as(Va == 0x0402) //Numeriese toename
{
stelNum++;
Write_Dgus(0x4000 + 0, stelNum % 10);
Write_Dgus(0x4000 + 2, setNum / 10 % 10);
Write_Dgus(0x4000 + 4, setNum / 100 % 10);
Write_Dgus(0x4000 + 6, setNum / 1000 % 10);
}
anders as(Va == 0x0403) //Numeriese afname
{
if(stelGetal > 0)
stelGetal--;
Write_Dgus(0x4000 + 0, stelNum % 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);
}
}
Postyd: 19-Sep-2023