IOT

STONE seeria HMI Arduino varajase õppimise kirjaoskuse demonstratsioon

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