IOT

STONE seriell HMI Arduino demonstration av tidig inlärning

Använda Grundläggande grafikkontroll av STONE seriell skärm kan du rita linjer, trianglar, polygoner, rektanglar, kvadrater, cirklar, bågar, fyllningsfärger, klippa och klistra och så vidare.

Designen av en tidig inlärningsmaskin med den seriella pekskärmen STVI056WT-01, för att identifiera former genom att titta på bilderna, för att känna igen ord enligt färger och för att designa ett underhållningsformat för att fastställa de korrekta felen, göra poäng eller klara nivån, så att barn kan lära sig känna igen färger, förstå grundläggande former och lära sig motsvarande ord på ett avslappnat och lekfullt sätt.

Den officiella videopresentationen ger inte den faktiska effekten av den grundläggande grafikkontrollen, så den här demon kommer att komplettera den. Instruktionerna för ritning överförs genom kommunikationen mellan arduino kontrollkort och STONE seriell skärmn.

Dessutom innehåller denna anteckning inte det fullständiga funktionella innehållet i den grundläggande grafikkontrollen, bara de funktioner som används vid användningen av utarbetningen, de inspelade testas på maskinen OK, du kan direkt ladda ner demokörningen.

Hårdvarumiljön för demon visas i figur 1, figur 2 och figur 3.

STONE kommer officiellt med 2 kort, bland vilka det fyrkantiga är ett USB-nedladdningskort och det långa är ett USB till seriellt kommunikationskort (och DC12V strömförsörjning för den seriella skärmen).

(Figur 1: Kommunikation och strömanslutning av STONE seriell skärm) (Figur 2: Anslutningsschema för nedladdning av Basic Graphics-kontrollfiler från STONE-skärmen)

(Figur 3: TX, RX, GND anslutning mellan STONE seriell skärm kommunikationskort och arduino utvecklingskort)

(Figur 4: Rityta för grundläggande grafikstyrning och variabel adress och andra parameterinställningar)

Efter att ha valt kontrollen Basicgraphics i STONE TOOLBox (GUI Design software) menyn Variable Configuration (D), och ställt in ritningsområdet och variabel adressparametrar, används 0x82-instruktionen för att skriva till den inställda Variable Memory-adressen (0x1000 ställs in här) Efter att ha ställt in ritningsområdet och variabel adressparametrar, används 0x82-instruktionen för att skriva CMD + Data_pack_Num_Max + Data till den inställda variabelminnesadressen (0x1000 i detta fall) för att slutföra implementeringen av ritningsfunktionerna. Den specifika funktionskoden visas i figur 6, där det finns en linjeritningsinstruktion 0x0002, med följande exempel.

(Figur 5: Grundläggande grafikkontrolldatakommandoformat)

(Figur 6: Illustration av kommandon för att rita linje och rektangel för grundläggande grafisk kontroll)

Linjeritningsinstruktion 0x0002, exempel på användning.

För att koppla en svart linje från koordinater (340, 200) till koordinater (585, 200), är instruktionen

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

Rita tre svarta linjer slutna till en triangel med tre hörn vid koordinaterna (200, 200), (300, 200), (250, 100), och instruktionen är

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

Ovanstående 0x1000 är variabeladressen för grundläggande grafikkontroll, 0x0002 är instruktionskoden, 0x0001 och 0x0003 är 1 rad respektive 3 rader, 0x0000 är färgkoden, värdet 0000 är svart och värdet ffff är ljust vitt. Andra ögonblickliga XY-koordinater för varje punkt.

Exempel på att rita en rektangel.

Rektangel övre vänstra vertexkoordinater (340, 237), nedre högra vertexkoordinater (585, 340) färg svart, kommandot är

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

Rita två rektanglar samtidigt (340, 237) – (585, 340), (324, 221) – (601, 356), kommandot är

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

Ovanstående 0x1000 är variabeladressen för grundläggande grafikkontroll, 0x0003 är rektangelkommandokoden, 0x0001, 0x0002 är 1 rektangel, 2 rektanglar, 0x0000, 0xffff är färgkoden, värdet på 0000 är svart, värdet på fffff är ljust. vit. De andra är XY-koordinaterna för det övre vänstra hörnet och det nedre högra hörnet av varje rektangel.

(Figur 7: Rektangelfyllning och rita cirkelkommandon för grundläggande grafikkontroll)

Exempel på rektangelfyllning.

Kommandot svart rektangelfyllning (470, 200) ~ (550 ,255) är

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

Exempel på att rita en cirkel.

Cirkelns centrum (470, 200), R = 50 svart, instruktionen är

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

För att rita två cirklar samtidigt, center A (470, 200) R=50 och center B (256, 200) R=80, båda i svart, är kommandot

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 för grundläggande grafikkontroll)

Bågupplösningen är 0.5 grader, 360 grader motsvarar 720 och 0 grader är i vertikal riktning uppåt.

Arc exempel.

Den övre bågen 315 grader till start – 45 grader till slut, cirkelns mittpunkt (300, 200) R = 80, svart, kommandot är

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

Angående färger.

0x0000 är svart 0xffff är vit 0x00ff är blått 0xf000 är rött 0xfd60 är orange

0xff60 är gul 0x2f60 är grön

(Figur 9: Grundläggande grafikstyrningsformgränssnitt ritbordsparametrar och adresser)

(Figur 10: Ritbordsparametrar och adresser för det grundläggande grafikkontrollfärggränssnittet)

Enligt variabeladressen är kommandot för att fylla grön färg för (10, 80) ~ (630, 400)

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

Andra likheter, se programkoden för detaljer.

Koden som visas i videon är följande.

/*

frank10

STONE och arduino COMM, den grundläggande grafiken spelar på programmet..

Tänder en lysdiod i en sekund, sedan släckt i en sekund, upprepade gånger. Lysdioden talar om för oss att den mjuka fungerar ok!

Provet har två sidor. Sidan 1 är form, sidan 2 är korlor!

Denna exempelkod finns i frankfilen. 20210625

*/

// Pin 13 har en LED ansluten på de flesta Arduino -kort.

// ge det ett namn:

int led = 13;

int iYePian = 0; //0x0020 för The num of YePian!

//int iGongLu = 0; //0x0180 för The GongLu!

//int iLiuLiang = 0; //0x0160 för The now LiuLiang!

int iJiao = 0; // 0x0260 för The JieJuJiao!

int iGongLuWater = 0; //0x0280 för The Water GongLu! värdet är 0-50000!

int iLed = 1; //fördröjningstid num.

int iLed2 = 1; //fördröjningstid num. 50ms gör en poäng.

int iLed3 = 0; //fördröjningstid num. 50ms gör en poäng.

int iLed4 = 0; //fördröjningstid num. 50ms gör en poäng.

int iCurve0 = 0; //Värdet på kurva0. 50ms gör en poäng.

int iCurve1 = 0; //Värdet på kurva1,. 50ms gör en poäng.

int iFlag0 = 1; // Flaggan för kurvan0 + eller -; .1 är upp, 0 är ner.

int iFlag1 = 1; // Flaggan för kurvan1 + eller -; .1 är upp, 0 är ner.

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

int iNum2 = 0; //läs i char num2 för ShuiDianZhan!

//int iPower = 2; //nyckelstaty 0x0009

//int iMode = 2; //nyckelstaty 0x000A

int iPowerWater = 2; //nyckelstaty 0x0039

// installationsrutinen körs en gång när du trycker på reset:

ogiltig installation () {

// initiera den digitala stiftet som en utgång.

pinMode(led, OUTPUT);

Serial.begin(115200); // Öppna den seriella kommunikationsfunktionen och vänta tills serieporten öppnas

while (!Serial) {

; // vänta på att serieporten ska anslutas. Behövs endast för Leonardo

}

}

// loop -rutinen går om och om igen för alltid:

ogiltig slinga () {

int inChar;

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

if (iLed == 800) {

//——- läs 0x0039 värde———-

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

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

Serial.write(0x04); //längd

Serial.write(0x83); // läs!

Serial.write(0x00); // adress till ShuiDianZhan Power-nyckel!

Serial.write(0x39); // adress till ShuiDianZhan strömbrytare!

Serial.write(0x01); // 0x0039(strömbrytare)

//———STONE returvärde kommer att vara “A5 5A 06 83 00 39 01 00 01 “——

}

// Läs informationen som skickas av serieporten:

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

/*

spara en bak.

eftersom kan ha en läsnyckel och ha ett nyckelverk.

programmet är ett HMI som en nyckel för input gör ett arbete av peplose.

*/

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

//——————————-0x0039 nyckel läs börja————————————

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 ; //Stäng av!

}

//——————0x0039 nyckel läs ok! iPowerWater ok!——————————-

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

fördröjning (1);

iLed += 1;

iLed2 += 1; // 50ms gör en poäng.

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

//———————————50ms gör en punkt börjar—————————————

if (iLed2 == 50) {

iLed2 = 1;

iLed4 += 1; // 50ms gör en poäng.

if(iFlag0 == 1){

iCurve0 += 1; // 50ms gör en poäng.

if(iCurve0 >= 150){

iFlag0 = 0; // iCurve0 svänger ner!.

}

}

if(iFlag0 == 0){

iCurve0 -= 1; // 50ms gör en poäng.

if(iCurve0 <= 1){

iFlag0 = 1; // iCurve0 dyker upp!.

}

}

if(iFlag1 == 1){

if(iLed4 >= 3){

iCurve1 += 1; // 50ms gör en poäng.

iLed4 = 0;

}

if(iCurve1 >= 50){

iFlag1 = 0; // iCurve1 svänger ner!.

}

}

if(iFlag1 == 0){

if(iLed4 >= 3){

iLed4 = 0;

iCurve1 -= 1; // 50ms gör en poäng.

}

if(iCurve1 <= 1){

iFlag1 = 1; // iCurve1 dyker upp!.

}

}

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

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

Serial.write(0x06);

Serial.write(0x84); //skriv till kurva!

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

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

Serial.write(0x00);

Serial.write(iCurve1);

Serial.write(0x00);

}

//———————————50ms gör punkten slut—————————————

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

if (iLed == 500) {

digitalWrite(led, HIGH); // slå på lysdioden (HÖG är spänningsnivån)

//delay(500); // vänta en sekund, Range:200-2000

}

if (iLed >= 1000) {

digitalWrite(led, LOW); // stäng av lysdioden genom att göra spänningen LÅG

//delay(500); // vänta en sekund, intervall:200-2000

iLed = 1;

if( iNum <= 6 ) iNum += 1; //form sväng!

if( iNum == 6 ) iNum = 0; //form sväng!

//————————————–Den röda börjar——————————————

if( iNum == 1){ // triangel! och rött!

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

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

Serial.write(0x19);

Serial.write(0x82);

Serial.write(0x10); // adressH för grundläggande grafik

Serial.write(0x00); // adressL för grundläggande grafik

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

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

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

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

Serial.write(0x00); //färgH svart

Serial.write(0x00); //färgL

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

Serial.write(0xc8); // punktX1L

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

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

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); // punkt Y1L

//fylla--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adressH för Basic graphics page2

Serial.write(0x00); // adressL för Basic graphics pabe2

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

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

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

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

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 färgH

Serial.write(0x00); // Röd färgL

}

//————————————–Det röda är slut——————————————

//————————————–Det gula och bågen börjar——————————————–

if( iNum == 2){ // båge! och gult!

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

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

Serial.write(0x13);

Serial.write(0x82);

Serial.write(0x10); // adressH för Basic graphics page1

Serial.write(0x00); // adressL för Basic graphics pabe1

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

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

Serial.write(0x00); // bågens nummer

Serial.write(0x01); // Bågens nummer.

Serial.write(0x00); // färgH svart

Serial.write(0x00); // färgL blank

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

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

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

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

//fylla--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adressH för Basic graphics page2

Serial.write(0x00); // adressL för Basic graphics pabe2

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

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

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

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

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 färgH

Serial.write(0x60); // Gul färgL

}

//————————————–Det gula och bågen är slut——————————————–

//————————————–Det gröna och rektangeln börjar——————————————

if( iNum == 3){ // rektangel! och grönt!

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x10); // adressH för Basic graphics page1

Serial.write(0x00); // adressL för Basic graphics pabe1

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

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

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

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

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

Serial.write(0x54); // punktX1L

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

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

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

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

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

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

Serial.write(0x00); // färgH svart

Serial.write(0x00); // färgL blank

//fylla--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adressH för Basic graphics page2

Serial.write(0x00); // adressL för Basic graphics pabe2

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

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

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

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

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ön färgH

Serial.write(0x60); // Grön färgL

}

//————————————–Det gröna och rektangeln är slut——————————————–

//————————————–Apelsinen och fyrkanten börjar——————————————

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

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x10); // adressH för Basic graphics page1

Serial.write(0x00); // adressL för Basic graphics pabe1

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

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

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

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

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); // färgH svart

Serial.write(0x00); // färgL blank

//fylla--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adressH för Basic graphics page2

Serial.write(0x00); // adressL för Basic graphics pabe2

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

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

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

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

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); // orange färgH

Serial.write(0x60); // orange färgL

}

//————————————–Apelsinen och fyrkanten är slut——————————————

//————————————–Den blå och cirkeln börjar——————————————

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

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

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

Serial.write(0x0F);

Serial.write(0x82);

Serial.write(0x10); // adressH för Basic graphics page1

Serial.write(0x00); // adressL för Basic graphics pabe1

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

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

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

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

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

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

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

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

Serial.write(0x00); // RH

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

Serial.write(0x00); // färgH svart

Serial.write(0x00); // färgL blank

//fylla--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adressH för Basic graphics page2

Serial.write(0x00); // adressL för Basic graphics pabe2

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

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

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

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

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å färgH

Serial.write(0xFF); // blå färgL

}

//————————————–Den blå och cirkeln är slut——————————————

Slutligen, felsökning online.

STONE TOOLBox (GUI Design-programvara) kommer att redigera nedladdningen av skärmfilen, ladda upp arduino-kodfilen, ansluta strömförsörjningen, kommunikation, slå på för att observera bildritningen och färgförändringen för att uppnå önskad effekt.

Koden som visas i videon är följande.

(inställningsförsök online)

Källa: Plato Data Intelligence