IOT

STONE seriell HMI Arduino demonstrasjon av tidlig læringskompetanse

Bruke Grunnleggende grafikkkontroll av STONE seriell skjerm, kan du tegne linjer, trekanter, polygoner, rektangler, firkanter, sirkler, buer, fyllfarger, klippe og lime, og så videre.

Utformingen av en tidlig læringsmaskin ved hjelp av den serielle berøringsskjermen STVI056WT-01, for å identifisere former ved å se på bildene, for å gjenkjenne ord i henhold til farger, og for å designe et underholdningsformat for å bestemme de riktige feilene, score eller bestå nivået, slik at barna kan lære å gjenkjenne farger, forstå grunnleggende former og lære de tilsvarende ordene på en avslappet og leken måte.

Den offisielle videopresentasjonen gir ikke den faktiske effekten av den grunnleggende grafikkkontrollen, så denne demoen vil supplere den. Instruksjonene for tegning overføres gjennom kommunikasjonen mellom arduino kontrollkort og STONE seriell skjermn.

I tillegg inkluderer dette notatet ikke det fullstendige funksjonelle innholdet i den grunnleggende grafikkkontrollen, bare funksjonene som brukes i bruken av utdypningen, de registrerte er testet på maskinen OK, du kan direkte laste ned demokjøringen.

Maskinvaremiljøet for demoen er vist i figur 1, figur 2 og figur 3.

STONE kommer offisielt med 2 brett, hvorav det firkantede er et USB-nedlastingskort og det lange er et USB til seriell kommunikasjonskort (og DC12V strømforsyning for den serielle skjermen).

(Figur 1: Kommunikasjon og strømtilkobling av STONE-serieskjerm) (Figur 2: Tilkoblingsskjema for nedlasting av Basic Graphics-kontrollfiler fra STONE-skjermen)

(Figur 3: TX, RX, GND forbindelse mellom STONE seriell skjerm kommunikasjonskort og arduino utviklingskort)

(Figur 4: Grunnleggende grafikkkontroll-tegneområde og variabel adresse og andre parameterinnstillinger)

Etter å ha valgt Basicgraphics-kontrollen i STONE TOOLBox(GUI Design software)-menyen Variabel konfigurasjon (D), og angitt parametere for tegningsområde og variable adresser, brukes 0x82-instruksjonen til å skrive til den angitte variable minneadressen (0x1000 angis her) Etter å ha angitt parameterne for tegningsområde og variabel adresse, brukes 0x82-instruksjonen til å skrive CMD + Data_pack_Num_Max + Data til den angitte variable minneadressen (0x1000 i dette tilfellet) for å fullføre implementeringen av tegningsfunksjonene. Den spesifikke funksjonskoden er vist i figur 6, hvor det er en linjetegningsinstruksjon 0x0002, ved å bruke følgende eksempel.

(Figur 5: Grunnleggende grafikkkontrolldatakommandoformat)

(Figur 6: Illustrasjon av kommandoer for tegning av linje og rektangel for grunnleggende grafisk kontroll)

Linjetegningsanvisning 0x0002, eksempel på bruk.

For å koble en svart linje fra koordinater (340, 200) til koordinater (585, 200), er instruksjonen

A5 5A 11 82 10 00 00 02 00 01 00 00 01 54 00 C8 02 49 00 C8

Tegn tre svarte linjer lukket til en trekant med tre toppunkter ved koordinater (200, 200), (300, 200), (250, 100), og instruksjonen er

A5 5A 19 82 10 00 00 02 00 03 00 00 00 00 C8 00 C8 01 2C 00 C8 00 FA 00 64 00 C8 00 C8

Ovennevnte 0x1000 er den variable adressen til grunnleggende grafikkkontroll, 0x0002 er instruksjonskoden, 0x0001 og 0x0003 er henholdsvis 1 linje og 3 linjer, 0x0000 er fargekoden, verdien 0000 er svart og verdien ffff er lys hvit. Andre øyeblikkelige XY-koordinater for hvert punkt.

Eksempel på tegning av et rektangel.

Rektangel øvre venstre toppunkt koordinater (340, 237), nedre høyre toppunkt koordinater (585, 340) farge svart, kommandoen er

A5 5A 11 82 10 00 00 03 00 01 01 54 00 ED 02 49 01 54 00 00

Tegn to rektangler samtidig (340, 237) – (585, 340), (324, 221) – (601, 356), kommandoen er

A5 5A 1B 82 10 00 00 03 00 02 01 54 00 ED 02 49 01 54 00 00 01 44 00 DD 02 59 01 64 FF FF

Ovennevnte 0x1000 er den variable adressen til grunnleggende grafikkkontroll, 0x0003 er rektangelkommandokoden, 0x0001, 0x0002 er 1 rektangel, 2 rektangler, 0x0000, 0xffff er fargekoden, verdien av 0000 er svart, verdien av fffff er lys hvit. De andre er XY-koordinatene til øverste venstre toppunkt og nederste høyre toppunkt i hvert rektangel.

(Figur 7: Rektangelfyll og tegn sirkelkommandoer for grunnleggende grafikkkontroll)

Eksempel på rektangelfyll.

Kommandoen svart rektangelfyll (470, 200) ~ (550) er

A5 5A 11 82 10 00 00 04 00 01 01 D6 00 C8 02 26 00 FF 00 00 00

Eksempel på å tegne en sirkel.

Sentrum av sirkelen (470, 200), R = 50 svart, instruksjonen er

A5 5A 0F 82 10 00 00 05 00 01 01 D6 00 C8 00 32 00 00

For å tegne to sirkler samtidig, senter A (470, 200) R=50 og senter B (256, 200) R=80, begge i svart, er kommandoen

A5 5A 17 82 10 00 00 05 00 02 01 D6 00 C8 00 32 00 00 01 00 00 C8 00 50 00 00

(Figur 8: Arc-kommando for grunnleggende grafikkkontroll)

Bueoppløsningen er 0.5 grader, 360 grader tilsvarer 720, og 0 grader er i vertikal retning oppover.

Arc eksempel.

Den øvre buen 315 grader til start – 45 grader til slutt, sentrum av sirkelen (300, 200) R = 80, svart, kommandoen er

A5 5A 13 82 10 00 00 0B 00 01 00 00 01 2C 00 C8 00 50 02 76 00 5A

Angående farger.

0x0000 er svart 0xffff er hvit 0x00ff er blå 0xf000 er rød 0xfd60 er oransje

0xff60 er gul 0x2f60 er grønn

(Figur 9: Grunnleggende grafikkkontroll figurgrensesnitt tegnebrettparametere og adresser)

(Figur 10: Tegnebrettparametere og adresser til fargegrensesnittet for grunnleggende grafikkkontroll)

I henhold til variabeladressen er kommandoen for å fylle grønn farge for (10, 80) ~ (630, 400)

A5 5A 11 82 60 00 00 04 00 01 00 0A 00 50 02 76 01 90 2f 60

Andre likheter, se programkoden for detaljer.

Koden som vises i videoen er som følger.

/*

frank10

STONE og arduino COMM, den grunnleggende grafikken spiller på programmet..

Slår på en LED på i ett sekund, så av i ett sekund, gjentatte ganger. LED-en forteller oss at den myke kjører ok!

Eksemplet har to sider. Side1 er form, side2 er corlor!

Denne eksempelkoden er i filen til frank. 20210625

*/

// Pin 13 har en LED koblet til de fleste Arduino-kort.

// gi det et navn:

int led = 13;

int iYePian = 0; //0x0020 for The num of YePian!

//int iGongLu = 0; //0x0180 for The GongLu!

//int iLiuLiang = 0; //0x0160 for The now LiuLiang!

int iJiao = 0; // 0x0260 for The JieJuJiao!

int iGongLuWater = 0; //0x0280 for The Water GongLu! verdien er 0-50000!

int iLed = 1; //forsinkelsestid num.

int iLed2 = 1; //forsinkelsestid num. 50ms gjør et poeng.

int iLed3 = 0; //forsinkelsestid num. 50ms gjør et poeng.

int iLed4 = 0; //forsinkelsestid num. 50ms gjør et poeng.

int iKurve0 = 0; //Verdien av kurve0. 50ms gjør et poeng.

int iKurve1 = 0; //Verdien av kurve1,. 50ms gjør et poeng.

int iFlag0 = 1; // Flagget til kurven0 + eller -; .1 er oppe, 0 er nede.

int iFlag1 = 1; // Flagget til kurven1 + eller -; .1 er oppe, 0 er nede.

int iNum = 0 ; //les i char num.

int iNum2 = 0; //les i char num2 for ShuiDianZhan!

//int iPower = 2; //nøkkelstatue 0x0009

//int iMode = 2; //nøkkelstatue 0x000A

int iPowerWater = 2; //nøkkelstatue 0x0039

// installasjonsrutinen kjører en gang når du trykker på reset:

ugyldig oppsett () {

// initialisere den digitale pinnen som en utgang.

pinMode(led, OUTPUT);

Serial.begin(115200); // Åpne funksjonen for seriell kommunikasjon og vent til den serielle porten åpnes

while (!Serial) {

; // vent til seriell port kobles til. Kun nødvendig for Leonardo

}

}

// loop-rutinen går om og om igjen for alltid:

ugyldig sløyfe () {

int inChar;

/*———————————————————————————-*/

if (iLed == 800) {

//——- les 0x0039 verdi———-

Serial.write(0xA5); //”A5” er 165

Serial.write(0x5A); //”5A” er 90

Serial.write(0x04); //lengde

Serial.write(0x83); // les!

Serial.write(0x00); // adressen til ShuiDianZhan Power-tasten!

Serial.write(0x39); // adressen til ShuiDianZhan strømtasten!

Serial.write(0x01); // 0x0039(av/på-tast)

//———STONE returverdi vil være “A5 5A 06 83 00 39 01 00 01 “——

}

// Les informasjonen sendt av serieporten:

if (Serial.available() > 0) { inChar = Serial.read(); }

/*

spar en bak.

fordi kan ha en lesenøkkel og ha et nøkkelverk.

programmet er en HMI som en nøkkel for input gjør et arbeid av peplose.

*/

//————————————————————————————

//——————————-0x0039 tast les start————————————

if (inChar == 0x39) { iNum2 = 1 ; }

if ((inChar == 0x01)&&(iNum2 == 1)) { iNum2 = 2 ; }

if ((inChar == 0x00)&&(iNum2 == 2)) { iNum2 = 3 ; }

if ((inChar == 0x01)&&(iNum2 == 3)) {

iNum2 = 0 ;

if(iPowerWater != 1){

iPowerWater = 1 ; //strøm på!

iJiao = 0;

iGongLuWater = 0 ;

}

}

if ((inChar == 0x02)&&(iNum2 == 3)) {

iNum2 = 0 ;

iPowerWater = 2 ; //Slå AV!

}

//——————0x0039 nøkkel les ok! iPowerWater ok!——————————-

//————————————————————————————

forsinkelse (1);

iLed += 1;

iLed2 += 1; // 50ms gjør et poeng.

//———————————————————————————————

//———————————50ms gjør et punkt begynne—————————————

if (iLed2 == 50) {

iLed2 = 1;

iLed4 += 1; // 50ms gjør et poeng.

if(iFlag0 == 1){

iCurve0 += 1; // 50ms gjør et poeng.

if(iCurve0 >= 150){

iFlag0 = 0; // iCurve0 skru ned!.

}

}

if(iFlag0 == 0){

iKurve0 -= 1; // 50ms gjør et poeng.

if(iCurve0 <= 1){

iFlag0 = 1; // iCurve0 dukker opp!.

}

}

if(iFlag1 == 1){

if(iLed4 >= 3){

iCurve1 += 1; // 50ms gjør et poeng.

iLed4 = 0;

}

if(iCurve1 >= 50){

iFlag1 = 0; // iCurve1 skru ned!.

}

}

if(iFlag1 == 0){

if(iLed4 >= 3){

iLed4 = 0;

iKurve1 -= 1; // 50ms gjør et poeng.

}

if(iCurve1 <= 1){

iFlag1 = 1; // iCurve1 dukker opp!.

}

}

Serial.write(0xA5); //”A5” er 165

Serial.write(0x5A); //”5A” er 90

Serial.write(0x06);

Serial.write(0x84); //skriv til kurve!

Serial.write(0x03); // Kurvebanen,

Serial.write(iCurve0); // N=1,

Serial.write(0x00);

Serial.write(iCurve1);

Serial.write(0x00);

}

//———————————50ms gjør poenget slutt—————————————

//———————————————————————————————

if (iLed == 500) {

digitalWrite(led, HIGH); // slå på LED-en (HØY er spenningsnivået)

//forsinkelse(500); // vent litt, Range:200-2000

}

if (iLed >= 1000) {

digitalWrite(led, LOW); // slå av LED ved å gjøre spenningen LAV

//forsinkelse(500); // vent litt, område:200-2000

iLed = 1;

if( iNum <= 6 ) iNum += 1; //form sving!

if( iNum == 6 ) iNum = 0; //form sving!

//————————————–Det røde begynner——————————————

if( iNum == 1){ // trekant! og rødt!

Serial.write(0xA5); //”A5” er 165

Serial.write(0x5A); //”5A” er 90

Serial.write(0x19);

Serial.write(0x82);

Serial.write(0x10); // adresseH til grunnleggende grafikk

Serial.write(0x00); // adresseL til grunnleggende grafikk

Serial.write(0x00); // Gjør linje CMD

Serial.write(0x02); // Gjør linje CMD

Serial.write(0x00); // nummeret på linjen

Serial.write(0x03); // Nummeret på linjen.

Serial.write(0x00); //fargeH svart

Serial.write(0x00); //fargeL

Serial.write(0x00); // punkt X1H

Serial.write(0xc8); // punktX1L

Serial.write(0x00); // punkt Y1H

Serial.write(0xc8); // punktY1L

Serial.write(0x01); // punkt X2H

Serial.write(0x2C); // punktX2L.

Serial.write(0x00); // punkt Y2H

Serial.write(0xC8); // punkt Y2L

Serial.write(0x00); // punkt X3H

Serial.write(0xFA); // punktX3L

Serial.write(0x00); // punkt Y3H

Serial.write(0x64); // punkt Y3L

Serial.write(0x00); // punkt X1H

Serial.write(0xc8); // punktX1L

Serial.write(0x00); // punkt Y1H

Serial.write(0xc8); // punktY1L

//fylle--

Serial.write(0xA5); //”A5” er 165

Serial.write(0x5A); //”5A” er 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresseH til Grunnleggende grafikk side2

Serial.write(0x00); // adresseL til Grunnleggende grafikk pabe2

Serial.write(0x00); // Fyll rektangel CMD

Serial.write(0x04); // Fyll rektangel CMD

Serial.write(0x00); // tallet på rektangelet

Serial.write(0x01); // Tallet på rektangelet

Serial.write(0x00); // punkt X1H

Serial.write(0x0A); // punktX1L

Serial.write(0x00); // punkt Y1H

Serial.write(0x50); // punkt Y1L

Serial.write(0x02); // punkt X2H

Serial.write(0x76); // punktX2L.

Serial.write(0x01); // punkt Y2H

Serial.write(0x90); // punkt Y2L

Serial.write(0xF0); // Rød fargeH

Serial.write(0x00); // Rød fargeL

}

//————————————–Det røde er slutt——————————————

//————————————–Den gule og buen begynner——————————————

if( iNum == 2){ // bue! og gul!

Serial.write(0xA5); //”A5” er 165

Serial.write(0x5A); //”5A” er 90

Serial.write(0x13);

Serial.write(0x82);

Serial.write(0x10); // adresseH til Grunnleggende grafikk side1

Serial.write(0x00); // adresseL til Grunnleggende grafikk pabe1

Serial.write(0x00); // Gjør arc CMD

Serial.write(0x0B); // Gjør arc CMD

Serial.write(0x00); // nummeret på buen

Serial.write(0x01); // Antallet på buen.

Serial.write(0x00); // fargeH svart

Serial.write(0x00); // fargeL blank

Serial.write(0x01); // sentrum av sirkel XH

Serial.write(0x2c); // centel of circle XL

Serial.write(0x00); // senter av sirkel YH

Serial.write(0xc8); // senter av sirkel YL

Serial.write(0x00); // RH

Serial.write(0x50); // RL.

Serial.write(0x02); // Vinkel1H

Serial.write(0x76); // Vinkel1L

Serial.write(0x00); // Vinkel2H

Serial.write(0x5A); // Vinkel2L

//fylle--

Serial.write(0xA5); //”A5” er 165

Serial.write(0x5A); //”5A” er 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresseH til Grunnleggende grafikk side2

Serial.write(0x00); // adresseL til Grunnleggende grafikk pabe2

Serial.write(0x00); // Fyll rektangel CMD

Serial.write(0x04); // Fyll rektangel CMD

Serial.write(0x00); // tallet på rektangelet

Serial.write(0x01); // Tallet på rektangelet

Serial.write(0x00); // punkt X1H

Serial.write(0x0A); // punktX1L

Serial.write(0x00); // punkt Y1H

Serial.write(0x50); // punkt Y1L

Serial.write(0x02); // punkt X2H

Serial.write(0x76); // punktX2L.

Serial.write(0x01); // punkt Y2H

Serial.write(0x90); // punkt Y2L

Serial.write(0xFF); // Gul fargeH

Serial.write(0x60); // Gul fargeL

}

//————————————–Den gule og buen er slutt——————————————

//————————————–Det grønne og rektangelet begynner——————————————

if( iNum == 3){ // rektangel! og grønt!

Serial.write(0xA5); //”A5” er 165

Serial.write(0x5A); //”5A” er 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x10); // adresseH til Grunnleggende grafikk side1

Serial.write(0x00); // adresseL til Grunnleggende grafikk pabe1

Serial.write(0x00); // Gjør rektangel CMD

Serial.write(0x03); // Gjør rektangel CMD

Serial.write(0x00); // tallet på rektangelet

Serial.write(0x01); // Tallet på rektangelet

Serial.write(0x01); // punkt X1H

Serial.write(0x54); // punktX1L

Serial.write(0x00); // punkt Y1H

Serial.write(0xED); // punktY1L

Serial.write(0x02); // punkt X2H

Serial.write(0x49); // punktX2L.

Serial.write(0x01); // punkt Y2H

Serial.write(0x54); // punkt Y2L

Serial.write(0x00); // fargeH svart

Serial.write(0x00); // fargeL blank

//fylle--

Serial.write(0xA5); //”A5” er 165

Serial.write(0x5A); //”5A” er 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresseH til Grunnleggende grafikk side2

Serial.write(0x00); // adresseL til Grunnleggende grafikk pabe2

Serial.write(0x00); // Fyll rektangel CMD

Serial.write(0x04); // Fyll rektangel CMD

Serial.write(0x00); // tallet på rektangelet

Serial.write(0x01); // Tallet på rektangelet

Serial.write(0x00); // punkt X1H

Serial.write(0x0A); // punktX1L

Serial.write(0x00); // punkt Y1H

Serial.write(0x50); // punkt Y1L

Serial.write(0x02); // punkt X2H

Serial.write(0x76); // punktX2L.

Serial.write(0x01); // punkt Y2H

Serial.write(0x90); // punkt Y2L

Serial.write(0x2F); // Grønn fargeH

Serial.write(0x60); // Grønn fargeL

}

//—————————————Det grønne og rektangelet er slutt——————————————

//————————————–appelsinen og firkanten begynner——————————————

if( iNum == 4){ // kvadrat! og oransje!

Serial.write(0xA5); //”A5” er 165

Serial.write(0x5A); //”5A” er 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x10); // adresseH til Grunnleggende grafikk side1

Serial.write(0x00); // adresseL til Grunnleggende grafikk pabe1

Serial.write(0x00); // Gjør rektangel CMD

Serial.write(0x03); // Gjør rektangel CMD

Serial.write(0x00); // tallet på rektangelet

Serial.write(0x01); // Tallet på rektangelet

Serial.write(0x01); // punkt X1H

Serial.write(0x54); // punktX1L

Serial.write(0x00); // punkt Y1H

Serial.write(0x91); // punkt Y1L

Serial.write(0x02); // punkt X2H

Serial.write(0x49); // punktX2L.

Serial.write(0x01); // punkt Y2H

Serial.write(0x86); // punkt Y2L

Serial.write(0x00); // fargeH svart

Serial.write(0x00); // fargeL blank

//fylle--

Serial.write(0xA5); //”A5” er 165

Serial.write(0x5A); //”5A” er 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresseH til Grunnleggende grafikk side2

Serial.write(0x00); // adresseL til Grunnleggende grafikk pabe2

Serial.write(0x00); // Fyll rektangel CMD

Serial.write(0x04); // Fyll rektangel CMD

Serial.write(0x00); // tallet på rektangelet

Serial.write(0x01); // Tallet på rektangelet

Serial.write(0x00); // punkt X1H

Serial.write(0x0A); // punktX1L

Serial.write(0x00); // punkt Y1H

Serial.write(0x50); // punkt Y1L

Serial.write(0x02); // punkt X2H

Serial.write(0x76); // punktX2L.

Serial.write(0x01); // punkt Y2H

Serial.write(0x90); // punkt Y2L

Serial.write(0xFD); // oransje fargeH

Serial.write(0x60); // oransje fargeL

}

//————————————–Oransje og firkanten er slutt——————————————

//————————————–Den blå og sirkelen begynner——————————————

if( iNum == 5){ // sirkel! og blå!

Serial.write(0xA5); //”A5” er 165

Serial.write(0x5A); //”5A” er 90

Serial.write(0x0F);

Serial.write(0x82);

Serial.write(0x10); // adresseH til Grunnleggende grafikk side1

Serial.write(0x00); // adresseL til Grunnleggende grafikk pabe1

Serial.write(0x00); // Gjør sirkel CMD

Serial.write(0x05); // Gjør sirkel CMD

Serial.write(0x00); // tallet på sirkelen

Serial.write(0x01); // Antallet på sirkelen

Serial.write(0x01); // sentrum av sirkel XH

Serial.write(0xD6); // centel of circle XL

Serial.write(0x00); // senter av sirkel YH

Serial.write(0xc8); // senter av sirkel YL

Serial.write(0x00); // RH

Serial.write(0x32); // RL.

Serial.write(0x00); // fargeH svart

Serial.write(0x00); // fargeL blank

//fylle--

Serial.write(0xA5); //”A5” er 165

Serial.write(0x5A); //”5A” er 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresseH til Grunnleggende grafikk side2

Serial.write(0x00); // adresseL til Grunnleggende grafikk pabe2

Serial.write(0x00); // Fyll rektangel CMD

Serial.write(0x04); // Fyll rektangel CMD

Serial.write(0x00); // tallet på rektangelet

Serial.write(0x01); // Tallet på rektangelet

Serial.write(0x00); // punkt X1H

Serial.write(0x0A); // punktX1L

Serial.write(0x00); // punkt Y1H

Serial.write(0x50); // punkt Y1L

Serial.write(0x02); // punkt X2H

Serial.write(0x76); // punktX2L.

Serial.write(0x01); // punkt Y2H

Serial.write(0x90); // punkt Y2L

Serial.write(0x00); // blå fargeH

Serial.write(0xFF); // blå fargeL

}

//————————————–Den blå og sirkelen er slutt——————————————

Til slutt, nettfeilsøking.

STONE TOOLBox (GUI Design-programvare) vil redigere skjermfilnedlastingen, arduino-kodefilopplasting, koble til strømforsyningen, kommunikasjon, slå på for å observere bildetegningen og fargeendringen for å oppnå ønsket effekt.

Koden som vises i videoen er som følger.

(nettinnstillingsforsøk)

Kilde: Platon Data Intelligence