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