——DWINi arendajafoorumist
Selles numbris tutvustame teile DWIN-i arendajafoorumi auhinnatud avatud lähtekoodiga juhtumit: intelligentne kassitoidu juhtimissüsteem.Insenerid kasutasid DWIN nutiekraani, et jälgida kassitoidu temperatuuri, niiskust ja järelejäänud kogust ning salvestada kassi toidu söömise rekordeid.Samuti kujundasid nad ainulaadselt tindiga maalimise stiilis kasutajaliidese komplekti ja tindiga klõpsamise efekti, kui neid puudutatakse sõrmega, et parandada puutetundlikkuse visuaalset tajumist.
Sissejuhatus:
1.UI pildimaterjal
DWIN nutiekraan lõpetab kasutajaliidese arendamise piltide, heli ja muude materjalide põhjal, mis tuleb eelnevalt ette valmistada vastavalt ekraanikuva sisule.
2.Liidese arendamine
Tarkvara DGUS taastab kasutajaliidese efekti läbi kihi ülekatte, kombineerib ettevalmistatud materjalid DGUS tarkvaras tervikpildiks ning seadistab kuva- ja puutefunktsioonid.
3. Rakendage klikiefekte ja heliefekte
Puuteasend saadakse läbi programmi 51, vajutamise efekt järgib sõrme liikumist ning saavutatakse ka klahvi saateheliefekt.
(1) Tuvastage puutetundlik asukohakood ja esitage heli:
tühine TouchDetect()
{
u16 Va[3] = 0;
u8 i = 0;
for(i = 0;i < 3;i++)
{
Va[i] = Read_Dgus(0x0016 + i);
if(Va[0] == 0x5A01)
{
}
muidu
{
murda;
}
}
if(i != 0) //Sisestamiseks esimene klõps
{
u16 esitus[2] = {0x0001, 0x4000};
touchAnimationFlag = 1;
touchAnimationCnt = 0;
touchPosX = Va[1];
touchPosY = Va[2];
write_dgus_vp(0x00A0, esitus, 2);
}
}
(2) Puuteefekti kuvamise kood on järgmine:
tühine TouchStart()
{
if(puuteanimatsioonilipp == 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. Järgmine samm on ekraani kaudu vastavate parameetrite seadistamine ja andmete edastamine ESP32 kaudu kassitoidu kontrollerile, et realiseerida kassitoidu automaatne söötmise funktsioon.Konkreetne kood on järgmine:
//Hangi nupu olek
void get_key_status()
{
int i = 0;
//u16 Va=Read_Dgus(addr);
u16 Va=Read_Dgus(0x1000);
if(Va != 0x0000)
{
//Status leht
if(Va == 0x0103) //Paigutage g arv
{
u16 vahetusleht[2] = {0x5A01, 19};
setNum = placeGramNum;
tagaleht = 1;//Tagasi olekulehele
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, vahetusleht, 2);
}
else if(Va == 0x0102)
{
OneSendData3(kohtGramNum);//Kohtkassitoitüks kord
}
else if(Va == 0x0101) //Seadistusleht
{
u16 vahetusleht[2] = {0x5A01, 3};
for(i = 0;i < 6;i++)
{
if(i == 0)
{
Write_Dgus(0x3070 + i * 0x10 + 0, praeguneaeg[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, praeguneaeg[i] / 10 % 10);
Write_Dgus(0x3070 + i * 0x10 + 4, praeguneaeg[i] / 100 % 10);
Write_Dgus(0x3070 + i * 0x10 + 6, praeguneaeg[i] / 1000 % 10);
}
muidu
{
Write_Dgus(0x3070 + i * 0x10 + 0, praeguneaeg[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, praeguneaeg[i] / 10 % 10);
}
}
write_dgus_vp(0x0084, vahetusleht, 2);//Sisenege seadete lehele
}
else if(Va == 0x0100) //Rrekordileht
{
u16 vahetusleht[2] = {0x5A01, 2};
for(i = 0;i < 6;i++)
{
if(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);
}
muidu
{
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, vahetusleht, 2);//Sisenege salvestuslehele
}
//Rrekordileht
else if(Va == 0x0201) //Salvesta leht eelmine leht
{
if(lookEatCnt > 0)
{
lookEatCnt--;
for(i = 0;i < 6;i++)
{
if(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);
}
muidu
{
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) //Salvesta järgmine leht
{
if(lookSööCnt < eatCnt - 1)
{
lookEatCnt++;
for(i = 0;i < 6;i++)
{
if(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);
}
muidu
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);
}
}
}
}
//Seadistusleht
else if(Va == 0x0302)
{
if(ajarežiim == 1)
{
timeMode = 0;
Write_Dgus(0x3A12, 139);
}
}
else if(Va == 0x0303)
{
if(ajarežiim == 0)
{
timeMode = 1;
Write_Dgus(0x3A12, 242);
}
}
else if(Va >= 0x0304 && Va <= 0x0309)
{
u16 vahetusleht[2] = {0x5A01, 19};
tagaleht = 3;
tagaarv = 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, vahetusleht, 2);
}
else if(Va >= 0x030A && Va <= 0x030F)
{
u16 vahetusleht[2] = {0x5A01, 19};
tagaleht = 3;
tagaarv = Va;
setNum = praeguneAeg[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, vahetusleht, 2);
}
//Akohandada andmelehte
else if(Va == 0x0400) //Kinnita
{
u16 vahetusleht[2] = {0x5A01, 0x0000};
vahetusleht[1] = tagaleht;
if(backPage == 1) //Tagasi olekulehele
{
placeGramNum = setNum;
Write_Dgus(0x1140 + 0, kohtGramNum % 10);
Write_Dgus(0x1140 + 2, kohtGramNum / 10 % 10);
}
else if(tagaleht == 3)
{
if(tagaarv >= 0x0304 && tagaarv <= 0x0309)
{
u16 vali = 0;
vali = (backNum - 0x0304) * 0x10;
timrIntervalHour[backNum - 0x0304] = setNum;
Write_Dgus(0x3010 + select + 0, setNum % 10);
Write_Dgus(0x3010 + select + 2, setNum / 10 % 10);
}
else if(backNum >= 0x030A && backNum <= 0x030F)
{
u16 vali = 0;
vali = (backNum - 0x0304) * 0x10;
praeguneAeg[tagasiarv - 0x030A] = setNum;
if(tagaarv == 0x030A)
{
Write_Dgus(0x3010 + select + 0, setNum % 10);
Write_Dgus(0x3010 + select + 2, setNum / 10 % 10);
Write_Dgus(0x3010 + select + 4, setNum / 100 % 10);
Write_Dgus(0x3010 + select + 6, setNum / 1000 % 10);
}
muidu
{
Write_Dgus(0x3010 + select + 0, setNum % 10);
Write_Dgus(0x3010 + select + 2, setNum / 10 % 10);
}
}
}
write_dgus_vp(0x0084, vahetusleht, 2);
}
else if(Va == 0x0401) //tagasi
{
u16 vahetusleht[2] = {0x5A01, 0x0000};
vahetusleht[1] = tagaleht;
write_dgus_vp(0x0084, vahetusleht, 2);
}
else if(Va == 0x0402) //Arvuline suurenemine
{
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) //Arvuline vähenemine
{
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);
}
}
Postitusaeg: 19. september 2023