IOT

STONE seriel HMI Arduino demonstration af tidlig indlæring af læsefærdigheder

Brug af Grundlæggende grafikkontrol af STONE seriel skærm, kan du tegne linjer, trekanter, polygoner, rektangler, firkanter, cirkler, buer, fyldfarver, klippe og indsætte, og så videre.

Designet af en tidlig læringsmaskine ved hjælp af den serielle berøringsskærm STVI056WT-01, til at identificere former ved at se på billederne, for at genkende ord i henhold til farver og til at designe et underholdningsformat for at bestemme de korrekte fejl, score eller bestå niveauet, så børn kan lære at genkende farver, forstå grundformer og lære de tilsvarende ord på en afslappet og legende måde.

Den officielle videopræsentation giver ikke den faktiske effekt af den grundlæggende grafikkontrol, så denne demo vil supplere den. Instruktionerne til tegning overføres gennem kommunikationen mellem arduino kontrolkort og STONE seriel skærmn.

Derudover inkluderer denne note ikke det komplette funktionelle indhold af den grundlæggende grafikkontrol, kun de funktioner, der bruges i brugen af ​​udarbejdelsen, de optagede testes på maskinen OK, du kan direkte downloade demokørsel.

Hardwaremiljøet til demoen er vist i figur 1, figur 2 og figur 3.

STONE kommer officielt med 2 boards, blandt hvilke det firkantede er et USB-downloadkort og det lange er et USB til seriel kommunikationskort (og DC12V strømforsyning til den serielle skærm).

(Figur 1: Kommunikation og strømtilslutning af STONE seriel skærm) (Figur 2: Tilslutningsdiagram til download af Basic Graphics kontrolfiler fra STONE skærm)

(Figur 3: TX, RX, GND forbindelse mellem STONE seriel skærm kommunikationskort og arduino udviklingskort)

(Figur 4: Grundlæggende grafikkontrol-tegneområde og variabel adresse og andre parameterindstillinger)

Efter at have valgt kontrolelementet Basicgraphics i menuen STONE TOOLBox (GUI Design software) Variable Configuration (D), og indstilling af tegningsområdet og variable adresseparametre, bruges 0x82-instruktionen til at skrive til den indstillede Variable Memory-adresse (0x1000 indstilles her) Efter indstilling af tegningsområdet og variable adresseparametre, bruges 0x82-instruktionen til at skrive CMD + Data_pack_Num_Max + Data til den indstillede Variable Memory-adresse (0x1000 i dette tilfælde) for at fuldføre implementeringen af ​​tegningsfunktionerne. Den specifikke funktionskode er vist i figur 6, hvor der er en linjetegningsinstruktion 0x0002, ved hjælp af følgende eksempel.

(Figur 5: Grundlæggende grafikkontroldatakommandoformat)

(Figur 6: Illustration af tegnelinje- og rektangelkommandoer til grundlæggende grafisk kontrol)

Stregtegningsvejledning 0x0002, eksempel på brug.

For at forbinde en sort linje fra koordinater (340, 200) til koordinater (585, 200), er instruktionen

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

Tegn tre sorte linjer lukket ind i en trekant med tre spidser ved koordinaterne (200, 200), (300, 200), (250, 100), og instruktionen 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

Ovenstående 0x1000 er den variable adresse for Basic grafikkontrol, 0x0002 er instruktionskoden, 0x0001 og 0x0003 er henholdsvis 1 linje og 3 linjer, 0x0000 er farvekoden, værdien 0000 er sort og værdien ffff er lys hvid. Andre øjeblikkelige XY-koordinater for hvert punkt.

Eksempel på tegning af et rektangel.

Rektangel øverste venstre toppunkt koordinater (340, 237), nederste højre toppunkt koordinater (585, 340) farve sort, 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 samtidigt (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

Ovenstående 0x1000 er den variable adresse for grundlæggende grafikkontrol, 0x0003 er rektangelkommandokoden, 0x0001, 0x0002 er 1 rektangel, 2 rektangler, 0x0000, 0xffff er farvekoden, værdien af ​​0000 er sort, værdien af ​​fffff er lys hvid. De andre er XY-koordinaterne for det øverste venstre toppunkt og det nederste højre toppunkt i hvert rektangel.

(Figur 7: Rektangeludfyldnings- og tegnecirkelkommandoer til grundlæggende grafikkontrol)

Eksempel på rektangelfyld.

Kommandoen sort rektangelfyld (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å at tegne en cirkel.

Cirklens centrum (470, 200), R = 50 sort, instruktionen er

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

For at tegne to cirkler på samme tid, center A (470, 200) R=50 og center B (256, 200) R=80, begge i sort, 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 til grundlæggende grafikkontrol)

Bueopløsningen er 0.5 grader, 360 grader svarer til 720, og 0 grader er i lodret opadgående retning.

Arc eksempel.

Den øverste bue 315 grader til start – 45 grader til slut, midten af ​​cirklen (300, 200) R = 80, sort, kommandoen er

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

Med hensyn til farver.

0x0000 er sort 0xffff er hvid 0x00ff er blå 0xf000 er rød 0xfd60 er orange

0xff60 er gul 0x2f60 er grøn

(Figur 9: Grundlæggende grafikstyre formgrænseflade tegnebrætparametre og adresser)

(Figur 10: Tegnebrætparametre og adresser for den grundlæggende grafikkontrolfarvegrænseflade)

Ifølge den variable adresse er kommandoen til at udfylde grøn farve 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 ligheder, se programkoden for detaljer.

Koden demonstreret i videoen er som følger.

/*

frank10

STONE og arduino COMM, den grundlæggende grafik spiller på programmet..

Tænder en LED i et sekund og derefter slukket i et sekund gentagne gange. LED'en fortæller os, at den bløde kører ok!

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

Dette eksempelkode er i frank-filen. 20210625

*/

// Pin 13 har en LED tilsluttet på de fleste Arduino -tavler.

// giv det et navn:

int led = 13;

int iYePian = 0; //0x0020 for antallet af 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! værdi er 0-50000!

int iLed = 1; //forsinkelsestid num.

int iLed2 = 1; //forsinkelsestid num. 50ms gør et punkt.

int iLed3 = 0; //forsinkelsestid num. 50ms gør et punkt.

int iLed4 = 0; //forsinkelsestid num. 50ms gør et punkt.

int iKurve0 = 0; //Værdien af ​​kurve0. 50ms gør et punkt.

int iKurve1 = 0; //Værdien af ​​kurve1,. 50ms gør et punkt.

int iFlag0 = 1; // Flaget for kurven0 + eller -; .1 er op, 0 er nede.

int iFlag1 = 1; // Flaget for kurven1 + eller -; .1 er op, 0 er nede.

int iNum = 0 ; //læs i char num.

int iNum2 = 0; //læs i char num2 for ShuiDianZhan!

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

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

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

// installationsrutinen kører en gang, når du trykker på reset:

ugyldig opsætning () {

// initialiser den digitale pin som output.

pinMode(led, OUTPUT);

Serial.begin(115200); // Åbn den serielle kommunikationsfunktion og vent på, at den serielle port åbner

while (!Serial) {

; // vent på, at seriel port tilsluttes. Behøves kun til Leonardo

}

}

// loop -rutinen kører igen og igen for altid:

void loop () {

int inChar;

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

if (iLed == 800) {

//——- læs 0x0039 værdi———-

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

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

Serial.write(0x04); //længde

Serial.write(0x83); // Læs!

Serial.write(0x00); // adresse på ShuiDianZhan Power-tasten!

Serial.write(0x39); // adresse på ShuiDianZhan tænd / sluk nøgle!

Serial.write(0x01); // 0x0039(afbrydertast)

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

}

// Læs oplysningerne sendt af den serielle port:

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

/*

gem en bak.

fordi kan have en læsenøgle og have et nøgleværk.

programmet er en HMI, som en nøgle af input gør et arbejde af peplose.

*/

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

//——————————-0x0039 nøgle læsning begynde————————————

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 ; //tænd!

iJiao = 0;

iGongLuWater = 0 ;

}

}

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

iNum2 = 0 ;

iPowerWater = 2 ; //sluk!

}

//——————0x0039 nøgle læst ok! iPowerWater ok!——————————-

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

forsinkelse (1);

iLed += 1;

iLed2 += 1; // 50ms gør et punkt.

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

//———————————50ms gør et punkt begynde—————————————

if (iLed2 == 50) {

iLed2 = 1;

iLed4 += 1; // 50ms gør et punkt.

if(iFlag0 == 1){

iKurve0 += 1; // 50ms gør et punkt.

if(iKurve0 >= 150){

iFlag0 = 0; // iCurve0 skruer ned!.

}

}

if(iFlag0 == 0){

iKurve0 -= 1; // 50ms gør et punkt.

if(iCurve0 <= 1){

iFlag0 = 1; // iCurve0 dukker op!.

}

}

if(iFlag1 == 1){

if(iLed4 >= 3){

iKurve1 += 1; // 50ms gør et punkt.

iLed4 = 0;

}

if(iKurve1 >= 50){

iFlag1 = 0; // iCurve1 skruer ned!.

}

}

if(iFlag1 == 0){

if(iLed4 >= 3){

iLed4 = 0;

iKurve1 -= 1; // 50ms gør et punkt.

}

if(iCurve1 <= 1){

iFlag1 = 1; // iCurve1 dukker op!.

}

}

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(iKurve1);

Serial.write(0x00);

}

//——————————-50ms slutter punkt—————————————

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

if (iLed == 500) {

digitalWrite(led, HIGH); // tænd for LED'en (HØJ er spændingsniveauet)

//forsinkelse(500); // vent et øjeblik, Range:200-2000

}

if (iLed >= 1000) {

digitalWrite(led, LOW); // sluk LED'en ved at gøre spændingen LAV

//forsinkelse(500); // vent et øjeblik, interval:200-2000

iLed = 1;

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

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

//————————————–Den røde begynder——————————————

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

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

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

Serial.write(0x19);

Serial.write(0x82);

Serial.write(0x10); // adresseH for grundlæggende grafik

Serial.write(0x00); // adresseL af grundlæggende grafik

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

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

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

Serial.write(0x03); // Linjens nummer.

Serial.write(0x00); //farveH sort

Serial.write(0x00); //farveL

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); // punktY2L

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

Serial.write(0xFA); // punktX3L

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

Serial.write(0x64); // punktY3L

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

Serial.write(0xc8); // punktX1L

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

Serial.write(0xc8); // punktY1L

//fylde--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresseH på Grundlæggende grafik side2

Serial.write(0x00); // adresseL af Grundlæggende grafik pabe2

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

Serial.write(0x04); // Gør Fyld rektangel CMD

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

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

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

Serial.write(0x0A); // punktX1L

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

Serial.write(0x50); // punktY1L

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

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

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

Serial.write(0x90); // punktY2L

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

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

}

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

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

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 på Grundlæggende grafik side1

Serial.write(0x00); // adresseL af Grundlæggende grafik pabe1

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

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

Serial.write(0x00); // buens nummer

Serial.write(0x01); // Antallet af buen.

Serial.write(0x00); // farveH sort

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

Serial.write(0x01); // centrum af cirkel XH

Serial.write(0x2c); // centel af cirkel XL

Serial.write(0x00); // centel af cirkel YH

Serial.write(0xc8); // centel af cirkel 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

//fylde--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresseH på Grundlæggende grafik side2

Serial.write(0x00); // adresseL af Grundlæggende grafik pabe2

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

Serial.write(0x04); // Gør Fyld rektangel CMD

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

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

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

Serial.write(0x0A); // punktX1L

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

Serial.write(0x50); // punktY1L

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

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

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

Serial.write(0x90); // punktY2L

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

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

}

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

//—————————————Det grønne og rektanglet er begyndt——————————————

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

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x10); // adresseH på Grundlæggende grafik side1

Serial.write(0x00); // adresseL af Grundlæggende grafik pabe1

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

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

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

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

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); // punktY2L

Serial.write(0x00); // farveH sort

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

//fylde--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresseH på Grundlæggende grafik side2

Serial.write(0x00); // adresseL af Grundlæggende grafik pabe2

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

Serial.write(0x04); // Gør Fyld rektangel CMD

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

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

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

Serial.write(0x0A); // punktX1L

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

Serial.write(0x50); // punktY1L

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

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

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

Serial.write(0x90); // punktY2L

Serial.write(0x2F); // Grøn farveH

Serial.write(0x60); // Grøn farveL

}

//————————————–Det grønne og rektanglet er slut——————————————

//————————————–appelsinen og firkanten begynder——————————————

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

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x10); // adresseH på Grundlæggende grafik side1

Serial.write(0x00); // adresseL af Grundlæggende grafik pabe1

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

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

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

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

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

Serial.write(0x54); // punktX1L

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

Serial.write(0x91); // punktY1L

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

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

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

Serial.write(0x86); // punktY2L

Serial.write(0x00); // farveH sort

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

//fylde--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresseH på Grundlæggende grafik side2

Serial.write(0x00); // adresseL af Grundlæggende grafik pabe2

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

Serial.write(0x04); // Gør Fyld rektangel CMD

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

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

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

Serial.write(0x0A); // punktX1L

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

Serial.write(0x50); // punktY1L

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

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

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

Serial.write(0x90); // punktY2L

Serial.write(0xFD); // orange farveH

Serial.write(0x60); // orange farveL

}

//————————————–appelsinen og firkanten er slut——————————————

//————————————–Den blå og cirklen begynder——————————————

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

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

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

Serial.write(0x0F);

Serial.write(0x82);

Serial.write(0x10); // adresseH på Grundlæggende grafik side1

Serial.write(0x00); // adresseL af Grundlæggende grafik pabe1

Serial.write(0x00); // Gør cirkel CMD

Serial.write(0x05); // Gør cirkel CMD

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

Serial.write(0x01); // Cirklens nummer

Serial.write(0x01); // centrum af cirkel XH

Serial.write(0xD6); // centel af cirkel XL

Serial.write(0x00); // centel af cirkel YH

Serial.write(0xc8); // centel af cirkel YL

Serial.write(0x00); // RH

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

Serial.write(0x00); // farveH sort

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

//fylde--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresseH på Grundlæggende grafik side2

Serial.write(0x00); // adresseL af Grundlæggende grafik pabe2

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

Serial.write(0x04); // Gør Fyld rektangel CMD

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

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

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

Serial.write(0x0A); // punktX1L

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

Serial.write(0x50); // punktY1L

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

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

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

Serial.write(0x90); // punktY2L

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

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

}

//————————————–Den blå og cirklen er slut——————————————

Endelig online debugging.

STONE TOOLBox (GUI Design software) vil redigere skærmfilen download, arduino kode fil upload, tilslutte strømforsyningen, kommunikation, tænde for at observere billedtegningen og farveændringen for at opnå den ønskede effekt.

Koden demonstreret i videoen er som følger.

(online tuning forsøg)

Kilde: Platon Data Intelligence