——DWIN-kehittäjäfoorumista
Tässä numerossa esittelemme sinulle DWIN Developer Forumin palkitun avoimen lähdekoodin tapauksen: Intelligent Cat Food Control System.Insinöörit käyttivät DWIN-älynäyttöä valvomaan lämpötilaa, kosteutta ja kissanruoan jäljellä olevaa määrää sekä tallentamaan kissan syömistietoja.He suunnittelivat myös yksilöllisesti mustemaalaustyylin käyttöliittymäsarjan sekä musteen napsautustehosteen, kun niitä kosketetaan sormella, mikä parantaa kosketuspalautteen visuaalista havaintoa.
Esittely:
1.UI-kuvamateriaali
DWIN-älynäyttö viimeistelee käyttöliittymäkehityksen kuviin, ääniin ja muihin materiaaleihin, jotka on valmisteltava etukäteen näytön näytön sisällön mukaan.
2. Käyttöliittymän kehittäminen
DGUS-ohjelmisto palauttaa käyttöliittymävaikutelman kerrosten päällekkäisyyden avulla, yhdistää valmistetut materiaalit kokonaiskuvaksi DGUS-ohjelmistossa ja asettaa näyttö- ja kosketustoiminnot.
3. Toteuta napsautustehosteita ja äänitehosteita
Kosketusasento saadaan 51-ohjelman kautta, puristusvaikutus seuraa sormen liikettä, ja saavutetaan myös näppäinsäestysääniefekti.
(1) Tunnista kosketuspaikan koodi ja toista ääni:
void TouchDetect()
{
u16 Va[3] = 0;
u8i = 0;
for(i = 0;i < 3;i++)
{
Va[i] = Read_Dgus(0x0016 + i);
jos(Va[0] == 0x5A01)
{
}
muu
{
tauko;
}
}
if(i != 0) //Syötä napsauttamalla ensin
{
u16 play[2] = {0x0001, 0x4000};
touchAnimationFlag = 1;
touchAnimationCnt = 0;
touchPosX = Va[1];
touchPosY = Va[2];
write_dgus_vp(0x00A0, toisto, 2);
}
}
(2) Kosketustehostenäytön koodi on seuraava:
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. Seuraava vaihe on asettaa vastaavat parametrit näytön kautta ja sitten lähettää tiedot kissanruokaohjaimelle ESP32:n kautta kissanruoan automaattisen ruokintatoiminnon toteuttamiseksi.Tarkka koodi on seuraava:
//Hae painikkeen tila
void get_key_status()
{
int i = 0;
//u16 Va=Lue_Dgus(addr);
u16 Va=Lue_Dgus(0x1000);
jos(Va != 0x0000)
{
//Status sivu
if(Va == 0x0103) //Aseta g:n luku
{
u16-vaihtosivu[2] = {0x5A01, 19};
setNum = placeGramNum;
takasivu = 1;//Palaa tilasivulle
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, vaihtosivu, 2);
}
muuten jos(Va == 0x0102)
{
OneSendData3(paikkaGramNum);//Paikkakissanruokakerran
}
else if(Va == 0x0101) //Asetussivu
{
u16-vaihtosivu[2] = {0x5A01, 3};
for(i = 0;i < 6;i++)
{
jos(i == 0)
{
Write_Dgus(0x3070 + i * 0x10 + 0, nykyinenAika[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, nykyinenAika[i] / 10 % 10);
Write_Dgus(0x3070 + i * 0x10 + 4, nykyinenAika[i] / 100 % 10);
Write_Dgus(0x3070 + i * 0x10 + 6, nykyinenAika[i] / 1000 % 10);
}
muu
{
Write_Dgus(0x3070 + i * 0x10 + 0, nykyinenAika[i] % 10);
Write_Dgus(0x3070 + i * 0x10 + 2, nykyinenAika[i] / 10 % 10);
}
}
write_dgus_vp(0x0084, vaihtosivu, 2);//Siirry asetussivulle
}
else if(Va == 0x0100) //Rennätyssivu
{
u16-vaihtosivu[2] = {0x5A01, 2};
for(i = 0;i < 6;i++)
{
jos(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);
}
muu
{
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, vaihtosivu, 2);//Siirry tietuesivulle
}
//Rennätyssivu
else if(Va == 0x0201) //Tallenna sivu edellinen sivu
{
if(lookEatCnt > 0)
{
lookEatCnt--;
for(i = 0;i < 6;i++)
{
jos(i == 0)
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookSyöCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);
Write_Dgus(0x2000 + i * 0x10 + 4, eatFeedList[lookSyöCnt][i] / 100 % 10);
Write_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[lookSyöCnt][i] / 1000 % 10);
}
muu
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookSyöCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);
}
}
}
}
else if(Va == 0x0202) //Tallenna sivu seuraavalle sivulle
{
if(katsoSyöCnt <syöCnt - 1)
{
lookEatCnt++;
for(i = 0;i < 6;i++)
{
jos(i == 0)
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookSyöCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);
Write_Dgus(0x2000 + i * 0x10 + 4, eatFeedList[lookSyöCnt][i] / 100 % 10);
Write_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[lookSyöCnt][i] / 1000 % 10);
}
muu
{
Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookSyöCnt][i] % 10);
Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);
}
}
}
}
//Asetussivu
muuten jos(Va == 0x0302)
{
jos(aikatila == 1)
{
timeMode = 0;
Write_Dgus(0x3A12, 139);
}
}
muuten jos(Va == 0x0303)
{
jos(aikatila == 0)
{
timeMode = 1;
Write_Dgus(0x3A12, 242);
}
}
else if(Va >= 0x0304 && Va <= 0x0309)
{
u16-vaihtosivu[2] = {0x5A01, 19};
takasivu = 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, vaihtosivu, 2);
}
muuten jos(Va >= 0x030A && Va <= 0x030F)
{
u16-vaihtosivu[2] = {0x5A01, 19};
takasivu = 3;
backNum = Va;
setNum = nykyinenAika[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, vaihtosivu, 2);
}
//Asäädä datasivua
else if(Va == 0x0400) //Vahvistaa
{
u16-vaihtosivu[2] = {0x5A01, 0x0000};
vaihtosivu[1] = takasivu;
if(backPage == 1) //Palaa tilasivulle
{
placeGramNum = setNum;
Write_Dgus(0x1140 + 0, paikkaGramNum % 10);
Write_Dgus(0x1140 + 2, paikkaGramNum / 10 % 10);
}
muuten jos(takasivu == 3)
{
if(backNum >= 0x0304 && backNum <= 0x0309)
{
u16 select = 0;
select = (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 select = 0;
select = (backNum - 0x0304) * 0x10;
nykyinenAika[backNum - 0x030A] = setNum;
jos(takaluku == 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);
}
muu
{
Write_Dgus(0x3010 + select + 0, setNum % 10);
Write_Dgus(0x3010 + select + 2, setNum / 10 % 10);
}
}
}
write_dgus_vp(0x0084, vaihtosivu, 2);
}
else if(Va == 0x0401) //Takaisin
{
u16-vaihtosivu[2] = {0x5A01, 0x0000};
vaihtosivu[1] = takasivu;
write_dgus_vp(0x0084, vaihtosivu, 2);
}
else if(Va == 0x0402) //Numeerinen lisäys
{
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) //Numeerinen vähennys
{
jos(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);
}
}
Postitusaika: 19.9.2023