kasutades Graafika põhijuhtimine STONE jadaekraanil saate joonistada jooni, kolmnurki, hulknurki, ristkülikuid, ruute, ringe, kaare, täita värve, lõigata ja kleepida jne.
Varajase õppemasina kujundus puutetundliku seeriaekraaniga STVI056WT-01, kujundite tuvastamiseks pilte vaadates, sõnade äratundmiseks värvide järgi ja meelelahutusvormingu kujundamiseks õigete vigade määramiseks, punktisumma või taseme läbimiseks, et lapsed õpiksid pingevabalt ja mänguliselt tundma värve, mõistma põhikujundeid ja õppima vastavaid sõnu.
Ametlik videoesitlus ei anna graafika põhijuhtimise tegelikku mõju, seega täiendab see demo seda. Joonistamise juhised edastatakse vahelise suhtluse kaudu arduino juhtplaat ja KIVI seeriatasandn.
Lisaks ei sisalda see märkus Basic graafikajuhtimise täielikku funktsionaalset sisu, ainult väljatöötamisel kasutatud funktsioone, salvestatud on masinas testitud. OK, saate demo käivitada otse.
Demo riistvarakeskkond on näidatud joonistel 1, 2 ja 3.
STONE'il on ametlikult kaasas 2 plaati, millest nelinurkne on USB allalaadimisplaat ja pikk USB-jadasideplaat (ja DC12V toiteallikas jadaekraanile).
(Joonis 1: STONE jadaekraani side ja toiteühendus) (Joonis 2: Ühendusskeem Basic Graphics juhtfailide allalaadimiseks STONE ekraanilt)
(Joonis 3: TX, RX, GND ühendus STONE jadaekraani sideplaadi ja arduino arendusplaadi vahel)
(Joonis 4: Põhilised graafikajuhtimise joonistusala ja muutuv aadress ja muud parameetri sätted)
Pärast Basicgraphics juhtelemendi valimist STONE TOOLBox (GUI Design tarkvara) menüüst Variable Configuration (D) ning joonistusala ja muutuva aadressi parameetrite määramist kasutatakse määratud muutuva mäluaadressile kirjutamiseks käsku 0x82 (siin on määratud 0x1000). Pärast joonistusala ja muutuva aadressi parameetrite seadistamist kasutatakse 0x82 käsku CMD + Data_pack_Num_Max + Data kirjutamiseks määratud muutuva mälu aadressile (antud juhul 0x1000), et lõpetada joonistusfunktsioonide rakendamine. Konkreetne funktsioonikood on näidatud joonisel 6, kus on joone joonistamise käsk 0x0002, kasutades järgmist näidet.
(Joonis 5: Põhiline graafika juhtimise andmete käsuvorming)
(Joonis 6: joone ja ristküliku joonistamise käskude illustratsioon graafilise põhijuhtimise jaoks)
Joone joonistamise juhend 0x0002, kasutusnäide.
Musta joone ühendamiseks koordinaatidest (340, 200) koordinaatidega (585, 200) on juhis
A5 5A 11 82 10 00 00 02 00 01 00 00 01 54 00 C8 02 49 00 C8
Joonistage kolm musta joont, mis on suletud kolmnurgaks, millel on kolm tippu koordinaatidel (200, 200), (300, 200), (250, 100) ja juhis on
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
Ülaltoodud 0x1000 on graafika põhijuhtimise muutuja aadress, 0x0002 on käsukood, 0x0001 ja 0x0003 on vastavalt 1 rida ja 3 rida, 0x0000 on värvikood, väärtus 0000 on must ja väärtus ffff on helevalge. Iga punkti muud kohesed XY-koordinaadid.
Näide ristküliku joonistamisest.
Ristküliku ülemise vasaku tipu koordinaadid (340, 237), alumise parema tipu koordinaadid (585, 340) musta värvi, käsk on
A5 5A 11 82 10 00 00 03 00 01 01 54 00 ED 02 49 01 54 00 00
Joonestage korraga kaks ristkülikut (340, 237) – (585, 340), (324, 221) – (601, 356), käsk on
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
Ülaltoodud 0x1000 on graafika põhijuhtimise muutuja aadress, 0x0003 on ristküliku käsukood, 0x0001, 0x0002 on 1 ristkülik, 2 ristkülikut, 0x0000, 0xffff on värvikood, väärtus 0000 on must, ere väärtus on fff. valge. Teised on iga ristküliku ülemise vasaku tipu ja alumise parema tipu XY-koordinaadid.
(Joonis 7: ristküliku täitmise ja ringi joonistamise käsud graafika põhijuhtimiseks)
Ristküliku täitmise näide.
Musta ristküliku täitmise (470, 200) ~ (550) käsk on
A5 5A 11 82 10 00 00 04 00 01 01 D6 00 C8 02 26 00 FF 00 00 00
Ringi joonistamise näide.
Ringi keskpunkt (470, 200), R = 50 must, juhis on
A5 5A 0F 82 10 00 00 05 00 01 01 D6 00 C8 00 32 00 00
Kahe ringi üheaegseks joonistamiseks keskpunkt A (470, 200) R=50 ja keskpunkt B (256, 200) R=80, mõlemad mustaga, on käsk
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
(Joonis 8: Põhilise graafikajuhtimise kaarekäsk)
Kaare eraldusvõime on 0.5 kraadi, 360 kraadi vastab 720-le ja 0 kraadi on vertikaalselt ülespoole.
Kaare näide.
Ülemine kaar 315 kraadi algusest – 45 kraadi lõpuni, ringi keskpunkt (300, 200) R = 80, must, käsk on
A5 5A 13 82 10 00 00 0B 00 01 00 00 01 2C 00 C8 00 50 02 76 00 5A
Värvide osas.
0x0000 on must 0xffff on valge 0x00ff on sinine 0xf000 on punane 0xfd60 on oranž
0xff60 on kollane 0x2f60 on roheline
(Joonis 9: Põhilised graafikajuhtimise kuju liidese joonestusplaadi parameetrid ja aadressid)
(Joonis 10: Põhilise graafikajuhtimise värviliidese joonestuslaua parameetrid ja aadressid)
Muutuja aadressi järgi on rohelise värvi täitmise käsk (10, 80) ~ (630, 400) jaoks
A5 5A 11 82 60 00 00 04 00 01 00 0A 00 50 02 76 01 90 2f 60
Muud sarnasused, vaadake üksikasju programmi koodist.
Videos näidatud kood on järgmine.
/*
frank10
STONE ja arduino COMM, põhigraafika, mis mängib programmis.
Lülitab LED-i üheks sekundiks sisse, seejärel üheks sekundiks korduvalt välja. LED annab teada, et pehme töötab!
Näidisel on kaks lehekülge. Leht1 on kuju, leht2 on värviline!
See näidiskood on frangi failis. 20210625
*/
// Pin 13-l on enamikul Arduino plaatidel ühendatud LED.
// anna sellele nimi:
int led = 13;
int iYePian = 0; //0x0020 – The num of YePian!
//int iGongLu = 0; //0x0180 GongLu jaoks!
//int iLiuLiang = 0; //0x0160 jaoks The now LiuLiang!
int iJiao = 0; // 0x0260 The JieJuJiao!
int iGongLuWater = 0; //0x0280 The Water GongLu jaoks! väärtus on 0-50000!
int iLed = 1; //viivitusaeg num.
int iLed2 = 1; //viivitusaeg num. 50 ms teeb asja.
int iLed3 = 0; //viivitusaeg num. 50 ms teeb asja.
int iLed4 = 0; //viivitusaeg num. 50 ms teeb asja.
int iCurve0 = 0; //kõvera0 väärtus. 50 ms teeb asja.
int iCurve1 = 0; //Kõvera1 väärtus,. 50 ms teeb asja.
int iFlag0 = 1; // Kõvera lipp0 + või -; .1 on üles, 0 alla.
int iFlag1 = 1; // Kõvera lipp1 + või -; .1 on üles, 0 alla.
int iNum = 0; //loe sisse char num.
int iNum2 = 0; //loe ShuiDianZhani jaoks char num2!
//int iPower = 2; //võtmekuju 0x0009
//int iMode = 2; //võtmekuju 0x000A
int iPowerWater = 2; //võtmekuju 0x0039
// häälestusrežiim töötab üks kord, kui vajutate lähtestamist:
void setup () {
// lähtestage digitaalne tihvt väljundina.
pinMode(led, OUTPUT);
Serial.begin(115200); // Avage jadaühenduse funktsioon ja oodake, kuni jadaport avaneb
while (!Serial) {
; // oodake jadaporti ühendamist. Vajalik ainult Leonardo jaoks
}
}
// tsükli rutiin jookseb ikka ja jälle igavesti:
void loop () {
int inChar;
/*———————————————————————————-*/
if (iLed == 800) {
//——- loe 0x0039 väärtus———-
Serial.write(0xA5); //"A5" on 165
Serial.write(0x5A); //"5A" on 90
Serial.write(0x04); //pikkus
Serial.write(0x83); // loe!
Serial.write(0x00); // ShuiDianZhan Toiteklahvi aadress!
Serial.write(0x39); // ShuiDianZhani toitenupu aadress!
Serial.write(0x01); // 0x0039 (toiteklahv)
//———STONE tagastusväärtus on "A5 5A 06 83 00 39 01 00 01"——
}
// Lugege jadapordi saadetud teavet:
if (Serial.available() > 0) { inChar = Serial.read(); }
/*
päästa bak.
sest sellel võib olla lugemisvõti ja võtme töö.
programm on HMI, mille sisendvõti teeb peplose tööd.
*/
//—————————————————————————————
//—————————-0x0039 klahvi lugemise algus————————————–
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 ; //toide ON!
iJiao = 0;
iGongLuWater = 0;
}
}
if ((inChar == 0x02)&&(iNum2 == 3)) {
iNum2 = 0;
iPowerWater = 2 ; //toide VÄLJAS!
}
//——————klahv 0x0039 loe ok! iPowerWater ok!—————————--
//—————————————————————————————
viivitus (1);
iLed += 1;
iLed2 += 1; // 50 ms teeb asja.
//———————————————————————————————–
//———————————50 ms alustab punkti—————————————–
if (iLed2 == 50) {
iLed2 = 1;
iLed4 += 1; // 50 ms teeb asja.
if(iFlag0 == 1){
iCurve0 += 1; // 50 ms teeb asja.
if(iCurve0 >= 150){
iFlag0 = 0; // iCurve0 keerab maha!.
}
}
if(iFlag0 == 0){
iCurve0 -= 1; // 50 ms teeb asja.
if(iCurve0 <= 1){
iFlag0 = 1; // iCurve0 ilmub üles!.
}
}
if(iFlag1 == 1){
if(iLed4 >= 3){
iCurve1 += 1; // 50 ms teeb asja.
iLed4 = 0;
}
if(iCurve1 >= 50){
iFlag1 = 0; // iCurve1 keerab maha!.
}
}
if(iFlag1 == 0){
if(iLed4 >= 3){
iLed4 = 0;
iCurve1 -= 1; // 50 ms teeb asja.
}
if(iCurve1 <= 1){
iFlag1 = 1; // iCurve1 ilmub üles!.
}
}
Serial.write(0xA5); //"A5" on 165
Serial.write(0x5A); //"5A" on 90
Serial.write(0x06);
Serial.write(0x84); //kirjuta kõveraks!
Serial.write(0x03); // Kurvi tee,
Serial.write(iCurve0); // N=1,
Serial.write(0x00);
Serial.write(iCurve1);
Serial.write(0x00);
}
//——————————-50ms teeb punkti lõpu——————————————
//———————————————————————————————-
if (iLed == 500) {
digitalWrite(led, HIGH); // lülitage LED sisse (HIGH on pingetase)
//delay(500); // oodake sekund, Vahemik: 200-2000
}
if (iLed >= 1000) {
digitalWrite(led, LOW); // lülitage LED välja, muutes pinge LOW
//delay(500); // oodake sekund, vahemik:200-2000
iLed = 1;
if( iNum <= 6 ) iNum += 1; //kuju pööre!
if( iNum == 6 ) iNum = 0; //kuju pööre!
//————————————– Punane algab——————————————–
if( iNum == 1){ // kolmnurk! ja punane!
Serial.write(0xA5); //"A5" on 165
Serial.write(0x5A); //"5A" on 90
Serial.write(0x19);
Serial.write(0x82);
Serial.write(0x10); // Põhigraafika aadressH
Serial.write(0x00); // Põhigraafika aadressL
Serial.write(0x00); // Tee rida CMD
Serial.write(0x02); // Tee rida CMD
Serial.write(0x00); // rea number
Serial.write(0x03); // Rea number.
Serial.write(0x00); //värvH must
Serial.write(0x00); //värvL
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
//täitke--
Serial.write(0xA5); //"A5" on 165
Serial.write(0x5A); //"5A" on 90
Serial.write(0x11);
Serial.write(0x82);
Serial.write(0x60); // Põhigraafika lehe2 aadressH
Serial.write(0x00); // Põhigraafika pabe2 aadressL
Serial.write(0x00); // Kas Täida ristkülik CMD
Serial.write(0x04); // Kas Täida ristkülik CMD
Serial.write(0x00); // ristküliku number
Serial.write(0x01); // Ristküliku arv
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); // Punane värvH
Serial.write(0x00); // Punane värvL
}
//—————————————Punane on lõpp——————————————–
//————————————– Kollane ja kaar algab——————————————–
if( iNum == 2){ // kaar! ja kollane!
Serial.write(0xA5); //"A5" on 165
Serial.write(0x5A); //"5A" on 90
Serial.write(0x13);
Serial.write(0x82);
Serial.write(0x10); // Põhigraafika lehe1 aadressH
Serial.write(0x00); // Põhigraafika pabe1 aadressL
Serial.write(0x00); // Tee kaar CMD
Serial.write(0x0B); // Tee arc CMD
Serial.write(0x00); // kaare number
Serial.write(0x01); // Kaare number.
Serial.write(0x00); // värv H must
Serial.write(0x00); // värvL tühi
Serial.write(0x01); // ringi keskpunkt XH
Serial.write(0x2c); // XL ringi keskpunkt
Serial.write(0x00); // ringi keskpunkt YH
Serial.write(0xc8); // ringi keskpunkt YL
Serial.write(0x00); // RH
Serial.write(0x50); // RL.
Serial.write(0x02); // Nurk 1H
Serial.write(0x76); // Nurk1L
Serial.write(0x00); // Nurk 2H
Serial.write(0x5A); // Nurk2L
//täitke--
Serial.write(0xA5); //"A5" on 165
Serial.write(0x5A); //"5A" on 90
Serial.write(0x11);
Serial.write(0x82);
Serial.write(0x60); // Põhigraafika lehe2 aadressH
Serial.write(0x00); // Põhigraafika pabe2 aadressL
Serial.write(0x00); // Kas Täida ristkülik CMD
Serial.write(0x04); // Kas Täida ristkülik CMD
Serial.write(0x00); // ristküliku number
Serial.write(0x01); // Ristküliku arv
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); // Kollane värvH
Serial.write(0x60); // Kollane värvL
}
//—————————————Kollane ja kaar on otsas——————————————–
//—————————————Algab roheline ja ristkülik——————————————–
if( iNum == 3){ // ristkülik! ja roheline!
Serial.write(0xA5); //"A5" on 165
Serial.write(0x5A); //"5A" on 90
Serial.write(0x11);
Serial.write(0x82);
Serial.write(0x10); // Põhigraafika lehe1 aadressH
Serial.write(0x00); // Põhigraafika pabe1 aadressL
Serial.write(0x00); // Tee ristkülik CMD
Serial.write(0x03); // Tee ristkülik CMD
Serial.write(0x00); // ristküliku number
Serial.write(0x01); // Ristküliku arv
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); // värv H must
Serial.write(0x00); // värvL tühi
//täitke--
Serial.write(0xA5); //"A5" on 165
Serial.write(0x5A); //"5A" on 90
Serial.write(0x11);
Serial.write(0x82);
Serial.write(0x60); // Põhigraafika lehe2 aadressH
Serial.write(0x00); // Põhigraafika pabe2 aadressL
Serial.write(0x00); // Kas Täida ristkülik CMD
Serial.write(0x04); // Kas Täida ristkülik CMD
Serial.write(0x00); // ristküliku number
Serial.write(0x01); // Ristküliku arv
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); // Roheline värvH
Serial.write(0x60); // Roheline värvL
}
//—————————————Roheline ja ristkülik on lõpp——————————————–
//—————————————Algab oranž ja ruut——————————————–
if( iNum == 4){ // ruut! ja oranž!
Serial.write(0xA5); //"A5" on 165
Serial.write(0x5A); //"5A" on 90
Serial.write(0x11);
Serial.write(0x82);
Serial.write(0x10); // Põhigraafika lehe1 aadressH
Serial.write(0x00); // Põhigraafika pabe1 aadressL
Serial.write(0x00); // Tee ristkülik CMD
Serial.write(0x03); // Tee ristkülik CMD
Serial.write(0x00); // ristküliku number
Serial.write(0x01); // Ristküliku arv
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); // värv H must
Serial.write(0x00); // värvL tühi
//täitke--
Serial.write(0xA5); //"A5" on 165
Serial.write(0x5A); //"5A" on 90
Serial.write(0x11);
Serial.write(0x82);
Serial.write(0x60); // Põhigraafika lehe2 aadressH
Serial.write(0x00); // Põhigraafika pabe2 aadressL
Serial.write(0x00); // Kas Täida ristkülik CMD
Serial.write(0x04); // Kas Täida ristkülik CMD
Serial.write(0x00); // ristküliku number
Serial.write(0x01); // Ristküliku arv
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); // oranž värvH
Serial.write(0x60); // oranž värvL
}
//—————————————Oranž ja ruut on otsas——————————————–
//————————————– Sinine ja ring algab——————————————–
if( iNum == 5){ // ring! ja sinine!
Serial.write(0xA5); //"A5" on 165
Serial.write(0x5A); //"5A" on 90
Serial.write(0x0F);
Serial.write(0x82);
Serial.write(0x10); // Põhigraafika lehe1 aadressH
Serial.write(0x00); // Põhigraafika pabe1 aadressL
Serial.write(0x00); // Tee ring CMD
Serial.write(0x05); // Tee ring CMD
Serial.write(0x00); // ringi number
Serial.write(0x01); // Ringi number
Serial.write(0x01); // ringi keskpunkt XH
Serial.write(0xD6); // XL ringi keskpunkt
Serial.write(0x00); // ringi keskpunkt YH
Serial.write(0xc8); // ringi keskpunkt YL
Serial.write(0x00); // RH
Serial.write(0x32); // RL.
Serial.write(0x00); // värv H must
Serial.write(0x00); // värvL tühi
//täitke--
Serial.write(0xA5); //"A5" on 165
Serial.write(0x5A); //"5A" on 90
Serial.write(0x11);
Serial.write(0x82);
Serial.write(0x60); // Põhigraafika lehe2 aadressH
Serial.write(0x00); // Põhigraafika pabe2 aadressL
Serial.write(0x00); // Kas Täida ristkülik CMD
Serial.write(0x04); // Kas Täida ristkülik CMD
Serial.write(0x00); // ristküliku number
Serial.write(0x01); // Ristküliku arv
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); // sinine värvH
Serial.write(0xFF); // sinine värvL
}
//————————————– Sinine ja ring on otsas——————————————–
Lõpuks võrgusilumine.
STONE TOOLBox (GUI Design tarkvara) redigeerib ekraanifailide allalaadimist, arduino koodifaili üleslaadimist, ühendab toiteallika, side, lülitab sisse, et jälgida pildi joonistamist ja värvimuutust, et saavutada soovitud efekt.
Videos näidatud kood on järgmine.
(veebi häälestamise katsed)
Allikas: Platon Data Intelligence