——Van het DWIN-ontwikkelaarsforum
In dit nummer introduceren we u de bekroonde open source-case van het DWIN Developer Forum: Intelligent Cat Food Control System.Ingenieurs gebruikten het slimme DWIN-scherm om de temperatuur, vochtigheid en resterende hoeveelheid kattenvoer te monitoren, en om de eetgegevens van de kat op te slaan.Ze ontwierpen ook een unieke gebruikersinterface in inktschilderstijl, evenals een inktklikeffect bij aanraking met een vinger, om de visuele perceptie van aanraakfeedback te verbeteren.
Invoering:
1.UI-beeldmateriaal
DWIN smart screen voltooit de UI-ontwikkeling op basis van afbeeldingen, audio en ander materiaal dat van tevoren moet worden voorbereid op basis van de schermweergave-inhoud.
2. Interface-ontwikkeling
De DGUS-software herstelt het UI-effect door middel van laagoverlay, combineert de voorbereide materialen tot een compleet beeld in de DGUS-software en stelt de weergave- en aanraakfuncties in.
3. Implementeer klikeffecten en geluidseffecten
De aanraakpositie wordt verkregen via het 51-programma, het drukeffect volgt de beweging van de vinger en het toetsbegeleidingsgeluidseffect wordt ook bereikt.
(1) Detecteer de aanraaklocatiecode en speel audio af:
ongeldig TouchDetect()
{
u16 Va[3] = 0;
u8 ik = 0;
voor(i = 0;i < 3;i++)
{
Va[i] = Read_Dgus(0x0016 + i);
als(Va[0] == 0x5A01)
{
}
anders
{
pauze;
}
}
if(i != 0) //Klik eerst om binnen te gaan
{
u16 afspelen[2] = {0x0001, 0x4000};
touchAnimatieVlag = 1;
touchAnimatieCnt = 0;
touchPosX = Va[1];
aanrakingPosY = Va[2];
write_dgus_vp(0x00A0, afspelen, 2);
}
}
(2) De code voor de aanraakeffectweergave is als volgt:
ongeldig TouchStart()
{
if(touchAnimatieVlag == 1)
{
als(touchAnimationCnt == 0)
{
Write_Dgus(0x5011, touchPosX - 100);
Write_Dgus(0x5012, touchPosY - 100);
}
Write_Dgus(0x5000, touchAnimationCnt);
touchAnimatieCnt++;
als(touchAnimationCnt == 6)
{
touchAnimatieVlag = 0;
Schrijf_Dgus(0x5011, 1024);
Write_Dgus(0x5012, 600);
}
}
}
4. De volgende stap is het instellen van de overeenkomstige parameters via het scherm en het vervolgens via ESP32 verzenden van de gegevens naar de kattenvoercontroller om de automatische voedingsfunctie van kattenvoer te realiseren.De specifieke code is als volgt:
//Knopstatus ophalen
void get_key_status()
{
int ik = 0;
//u16 Va=Read_Dgus(adr);
u16 Va=Read_Dgus(0x1000);
als(Va != 0x0000)
{
//Status pagina
if(Va == 0x0103) //Plaats het aantal g
{
u16 schakelpagina[2] = {0x5A01, 19};
setNum = plaatsGramNum;
achterpagina = 1;//Terug naar statuspagina
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, schakelpagina, 2);
}
anders als(Va == 0x0102)
{
OneSendData3(plaatsGramNum);//Plaatskattenvoereenmaal
}
else if(Va == 0x0101) //Instellingenpagina
{
u16 schakelpagina[2] = {0x5A01, 3};
voor(i = 0;i < 6;i++)
{
als(ik == 0)
{
Write_Dgus(0x3070 + i * 0x10 + 0, huidigeTijd[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, huidigeTijd[i] / 10% 10);
Write_Dgus(0x3070 + i * 0x10 + 4, huidigeTijd[i] / 100% 10);
Write_Dgus(0x3070 + i * 0x10 + 6, huidigeTijd[i] / 1000% 10);
}
anders
{
Write_Dgus(0x3070 + i * 0x10 + 0, huidigeTijd[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, huidigeTijd[i] / 10% 10);
}
}
write_dgus_vp(0x0084, schakelpagina, 2);//Ga naar de instellingenpagina
}
anders als(Va == 0x0100) //Record-pagina
{
u16 schakelpagina[2] = {0x5A01, 2};
voor(i = 0;i < 6;i++)
{
als(ik == 0)
{
Write_Dgus(0x2000 + i * 0x10 + 0, eetFeedList[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, eetFeedList[0][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eetFeedList[0][i] / 10% 10);
}
}
write_dgus_vp(0x0084, schakelpagina, 2);//Ga naar de recordpagina
}
//Record-pagina
else if(Va == 0x0201) //Recordpagina vorige pagina
{
if(lookEatCnt > 0)
{
lookEatCnt--;
voor(i = 0;i < 6;i++)
{
als(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);
}
anders
{
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) //Recordpagina volgende pagina
{
if(lookEatCnt < eetCnt - 1)
{
lookEatCnt++;
voor(i = 0;i < 6;i++)
{
als(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);
}
anders
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10% 10);
}
}
}
}
//Instellingspagina
anders als(Va == 0x0302)
{
als(tijdmodus == 1)
{
tijdmodus = 0;
Write_Dgus(0x3A12, 139);
}
}
anders als(Va == 0x0303)
{
als(tijdmodus == 0)
{
tijdmodus = 1;
Write_Dgus(0x3A12, 242);
}
}
anders als(Va >= 0x0304 && Va <= 0x0309)
{
u16 schakelpagina[2] = {0x5A01, 19};
achterpagina = 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, schakelpagina, 2);
}
anders als(Va >= 0x030A && Va <= 0x030F)
{
u16 schakelpagina[2] = {0x5A01, 19};
achterpagina = 3;
backNum = Va;
setNum = huidigeTijd[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, schakelpagina, 2);
}
//Agegevenspagina aanpassen
anders als(Va == 0x0400) //Bevestigen
{
u16 schakelpagina[2] = {0x5A01, 0x0000};
schakelpagina[1] = achterpagina;
if(backPage == 1) //Terug naar statuspagina
{
plaatsGramNum = setNum;
Write_Dgus(0x1140 + 0, plaatsGramNum % 10);
Write_Dgus(0x1140 + 2, plaatsGramNum / 10% 10);
}
else if(achterpagina == 3)
{
if(backNum >= 0x0304 && backNum <= 0x0309)
{
u16 selecteren = 0;
selecteer = (backNum - 0x0304) * 0x10;
timrIntervalHour[backNum - 0x0304] = setNum;
Write_Dgus(0x3010 + selecteren + 0, setNum% 10);
Write_Dgus(0x3010 + selecteren + 2, setNum / 10% 10);
}
else if(backNum >= 0x030A && backNum <= 0x030F)
{
u16 selecteren = 0;
selecteer = (backNum - 0x0304) * 0x10;
huidigeTijd[backNum - 0x030A] = setNum;
if(backNum == 0x030A)
{
Write_Dgus(0x3010 + selecteren + 0, setNum% 10);
Write_Dgus(0x3010 + selecteren + 2, setNum / 10% 10);
Write_Dgus(0x3010 + selecteren + 4, setNum / 100% 10);
Write_Dgus(0x3010 + selecteren + 6, setNum / 1000% 10);
}
anders
{
Write_Dgus(0x3010 + selecteren + 0, setNum% 10);
Write_Dgus(0x3010 + selecteren + 2, setNum / 10% 10);
}
}
}
write_dgus_vp(0x0084, schakelpagina, 2);
}
anders als(Va == 0x0401) //Rug
{
u16 schakelpagina[2] = {0x5A01, 0x0000};
schakelpagina[1] = achterpagina;
write_dgus_vp(0x0084, schakelpagina, 2);
}
else if(Va == 0x0402) //Numerieke toename
{
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);
}
else if(Va == 0x0403) //Numerieke afname
{
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);
}
Schrijf_Dgus(0x1000, 0);
}
}
Posttijd: 19 september 2023