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