IOT

STONE serijski HMI Arduino demonstracija zgodnjega učenja pismenosti

Uporaba Osnovni grafični nadzor na serijskem zaslonu STONE lahko rišete črte, trikotnike, mnogokotnike, pravokotnike, kvadrate, kroge, loke, barve za polnjenje, izrežete in prilepite itd.

Zasnova zgodnjega učnega stroja z uporabo serijskega zaslona na dotik STVI056WT-01, za prepoznavanje oblik s pogledom na slike, za prepoznavanje besed glede na barve in za oblikovanje razvedrilnega formata za ugotavljanje pravilnih napak, točkovanje ali prehod ravni, da se otroci naučijo prepoznavati barve, razumeti osnovne oblike in se na sproščen in igriv način naučiti ustreznih besed.

Uradna video predstavitev ne daje dejanskega učinka osnovnega grafičnega nadzora, zato ga bo ta demo dopolnil. Navodila za risanje se prenašajo s komunikacijo med arduino nadzorna plošča in KAMNO serijsko meliščen.

Poleg tega ta opomba ne vključuje celotne funkcionalne vsebine osnovnega grafičnega nadzora, le funkcije, uporabljene pri uporabi izdelave, posneto so testirane na stroju OK, lahko neposredno prenesete demo zagon.

Okolje strojne opreme za demonstracijo je prikazano na sliki 1, sliki 2 in sliki 3.

STONE ima uradno 2 plošči, med katerimi je kvadratna plošča za prenos USB, dolga pa je plošča za serijsko komunikacijo USB (in DC12V napajalnik za serijski zaslon).

(Slika 1: Komunikacija in napajalna povezava serijskega zaslona STONE) (Slika 2: Diagram povezave za prenos osnovnih grafičnih kontrolnih datotek z zaslona STONE)

(Slika 3: TX, RX, GND povezava med STONE serijsko zaslonsko komunikacijsko ploščo in razvojno ploščo arduino)

(Slika 4: Osnovno grafično krmilno območje za risanje in spremenljiv naslov ter druge nastavitve parametrov)

Po izbiri krmilnika Basicgraphics v meniju STONE TOOLBox (programska oprema za načrtovanje GUI) Konfiguracija spremenljivke (D) in nastavitvi risalnega območja in parametrov spremenljivega naslova se uporabi navodilo 0x82 za zapisovanje na nastavljen naslov spremenljivega pomnilnika (tu je nastavljen 0x1000) Po nastavitvi parametrov območja risanja in spremenljivega naslova se z navodilom 0x82 zapiše CMD + Data_pack_Num_Max + Data v nastavljen naslov spremenljivega pomnilnika (v tem primeru 0x1000), da se dokonča izvajanje funkcij risanja. Posebna koda funkcije je prikazana na sliki 6, kjer je navodilo za risanje črte 0x0002, z uporabo naslednjega primera.

(Slika 5: Format ukaza za osnovni grafični nadzor)

(Slika 6: Ilustracija ukazov za risanje črte in pravokotnika za osnovni grafični nadzor)

Navodilo za risanje črt 0x0002, primer uporabe.

Za povezavo črne črte od koordinat (340, 200) do koordinat (585, 200) je navodilo

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

Nariši tri črne črte, zaprte v trikotnik s tremi oglišči v koordinatah (200, 200), (300, 200), (250, 100), in navodilo je

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

Zgornji 0x1000 je spremenljiv naslov osnovnega grafičnega nadzora, 0x0002 je koda navodil, 0x0001 in 0x0003 sta 1 vrstica oziroma 3 vrstice, 0x0000 je barvna koda, vrednost 0000 je črna in vrednost ffff je svetlo bela. Druge trenutne koordinate XY vsake točke.

Primer risanja pravokotnika.

Koordinate zgornjega levega pravokotnika (340, 237), spodnje desne koordinate oglišča (585, 340) črna barva, ukaz je

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

Istočasno nariši dva pravokotnika (340, 237) – (585, 340), (324, 221) – (601, 356), ukaz je

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

Zgornji 0x1000 je spremenljiv naslov osnovnega grafičnega nadzora, 0x0003 je koda ukaza pravokotnika, 0x0001, 0x0002 sta 1 pravokotnik, 2 pravokotnika, 0x0000, 0xffff je barvna koda, vrednost 0000 je svetlobna vrednost fff črna belo. Druge so koordinate XY zgornjega levega oglišča in spodnjega desnega oglišča vsakega pravokotnika.

(Slika 7: Ukazi za polnjenje pravokotnika in risanje kroga za osnovni grafični nadzor)

Primer polnjenja pravokotnika.

Ukaz za polnjenje črnega pravokotnika (470, 200) ~ (550, 255) je

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

Primer risanja kroga.

Središče kroga (470, 200), R = 50 črno, navodilo je

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

Če želite narisati dva kroga hkrati, središče A (470, 200) R=50 in središče B (256, 200) R=80, oba v črni barvi, je ukaz

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

(Slika 8: Ukaz Arc za osnovni grafični nadzor)

Ločljivost loka je 0.5 stopinje, 360 stopinj ustreza 720, 0 stopinj pa je v navpični smeri navzgor.

Primer loka.

Zgornji lok 315 stopinj do začetka – 45 stopinj do konca, središče kroga (300, 200) R = 80, črno, ukaz je

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

Glede barv.

0x0000 je črna 0xffff je bela 0x00ff je modra 0xf000 je rdeča 0xfd60 je oranžna

0xff60 je rumena 0x2f60 je zelena

(Slika 9: Parametri in naslovi risalne plošče vmesnika osnovne grafične krmilne oblike)

(Slika 10: Parametri risalne plošče in naslovi barvnega vmesnika Basic Grafic Control)

Glede na naslov spremenljivke je ukaz za polnjenje zelene barve za (10, 80) ~ (630, 400)

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

Druge podobnosti, glejte programsko kodo za podrobnosti.

Koda, prikazana v videoposnetku, je naslednja.

/*

frank10

STONE in arduino COMM, osnovna grafika se igra v programu..

Vklopi LED za eno sekundo, nato pa za eno sekundo večkrat ugasne. LED nam pove, da je mehki tek v redu!

Vzorec ima dve strani. Stran1 je oblika, stran2 je barva!

Ta primer kode je v datoteki frank. 20210625

*/

// Pin 13 ima LED priključeno na večino Arduino plošč.

// daj mu ime:

int led = 13;

int iYePian = 0; //0x0020 za število YePian!

//int iGongLu = 0; //0x0180 za The GongLu!

//int iLiuLiang = 0; //0x0160 za zdaj LiuLiang!

int iJiao = 0; // 0x0260 za The JieJuJiao!

int iGongLuWater = 0; //0x0280 za The Water GongLu! vrednost je 0-50000!

int iLed = 1; //čas zakasnitve št.

int iLed2 = 1; //čas zakasnitve št. 50 ms naredi točko.

int iLed3 = 0; //čas zakasnitve št. 50 ms naredi točko.

int iLed4 = 0; //čas zakasnitve št. 50 ms naredi točko.

int iCurve0 = 0; //Vrednost krivulje0. 50 ms naredi točko.

int iCurve1 = 0; //Vrednost krivulje1,. 50 ms naredi točko.

int iFlag0 = 1; // Zastava krivulje0 + ali -; .1 je gor, 0 je dol.

int iFlag1 = 1; // Zastava krivulje1 + ali -; .1 je gor, 0 je dol.

int iNum = 0; //preberite v char num.

int iNum2 = 0; //preberite v char num2 za ShuiDianZhan!

//int iPower = 2; // kip ključa 0x0009

//int iMode = 2; // kip ključa 0x000A

int iPowerWater = 2; // kip ključa 0x0039

// nastavitvena rutina se enkrat zažene, ko pritisnete reset:

nična namestitev () {

// inicializiramo digitalni pin kot izhod.

pinMode (LED, IZHOD);

Serial.begin(115200); // Odprite funkcijo serijske komunikacije in počakajte, da se odprejo serijska vrata

medtem ko (!Serial) {

; // počakajte, da se serijska vrata povežejo. Potreben samo za Leonarda

}

}

// rutina zanke se vedno znova ponavlja:

void loop () {

int inChar;

/*———————————————————————————*/

če (iLed == 800) {

//——- preberi vrednost 0x0039———-

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

Serial.write(0x5A); //"5A" je 90

Serial.write(0x04); //dolžina

Serial.write(0x83); // preberi!

Serial.write(0x00); // naslov ključa ShuiDianZhan Power!

Serial.write(0x39); // naslov ključa za vklop ShuiDianZhan!

Serial.write(0x01); // 0x0039 (tipka za vklop)

//———Vrnjena vrednost STONE bo "A5 5A 06 83 00 39 01 00 01 "——

}

// Preberite informacije, ki jih pošlje serijska vrata:

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

/*

prihrani bak.

ker lahko ima ključ za branje in ima delo ključa.

program je HMI, ki ključ za vnos opravlja delo peplose.

*/

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

//—————————-0x0039 začetek branja ključa—————————————

if (inChar == 0x39) { iNum2 = 1; }

if ((inChar == 0x01)&&(iNum2 == 1)) { iNum2 = 2 ; }

if ((inChar == 0x00)&&(iNum2 == 2)) { iNum2 = 3 ; }

če ((inChar == 0x01)&&(iNum2 == 3)) {

iNum2 = 0;

if(iPowerWater != 1){

iPowerWater = 1; //vklop!

iJiao = 0;

iGongLuWater = 0;

}

}

če ((inChar == 0x02)&&(iNum2 == 3)) {

iNum2 = 0;

iPowerWater = 2; //ugasniti!

}

//——————0x0039 ključ preberi v redu! iPowerWater v redu!——————————-

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

zakasnitev (1);

iLed += 1;

iLed2 += 1; // 50 ms naredi točko.

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

// ----------- 50ms to točko začne -------------

če (iLed2 == 50) {

iLed2 = 1;

iLed4 += 1; // 50 ms naredi točko.

if(iFlag0 == 1){

iCurve0 += 1; // 50 ms naredi točko.

if(iCurve0 >= 150){

iFlag0 = 0; // iCurve0 zavrti navzdol!.

}

}

if(iFlag0 == 0){

iCurve0 -= 1; // 50 ms naredi točko.

if(iCurve0 <= 1){

iFlag0 = 1; // Pojavi se iCurve0!.

}

}

if(iFlag1 == 1){

if(iLed4 >= 3){

iCurve1 += 1; // 50 ms naredi točko.

iLed4 = 0;

}

if(iCurve1 >= 50){

iFlag1 = 0; // iCurve1 zavrti navzdol!.

}

}

if(iFlag1 == 0){

if(iLed4 >= 3){

iLed4 = 0;

iCurve1 -= 1; // 50 ms naredi točko.

}

if(iCurve1 <= 1){

iFlag1 = 1; // Pojavi se iCurve1!.

}

}

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

Serial.write(0x5A); //"5A" je 90

Serial.write(0x06);

Serial.write(0x84); // piši v krivuljo!

Serial.write(0x03); // Pot krivulje,

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

Serial.write(0x00);

Serial.write(iCurve1);

Serial.write(0x00);

}

//———————————-50ms do konca točke——————————————

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

če (iLed == 500) {

digitalWrite(led, HIGH); // vklopi LED (HIGH je nivo napetosti)

//zakasnitev (500); // počakajte sekundo, razpon: 200-2000

}

če (iLed >= 1000) {

digitalWrite(led, LOW); // ugasnite LED tako, da nastavite napetost NIZKA

//zakasnitev (500); // počakajte sekundo, razpon: 200-2000

iLed = 1;

if( iNum <= 6 ) iNum += 1; //obrni obliko!

if( iNum == 6 ) iNum = 0; //obrni obliko!

//—————————————Rdeča je začetek———————————————

if( iNum == 1){ // trikotnik! in rdeče!

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

Serial.write(0x5A); //"5A" je 90

Serial.write(0x19);

Serial.write(0x82);

Serial.write(0x10); // naslovH osnovne grafike

Serial.write(0x00); // naslovL osnovne grafike

Serial.write(0x00); // Naredi vrstico CMD

Serial.write(0x02); // Naredi vrstico CMD

Serial.write(0x00); // številka vrstice

Serial.write(0x03); // Številka vrstice.

Serial.write(0x00); //barvaH črna

Serial.write(0x00); //barvaL

Serial.write(0x00); // točka X1H

Serial.write(0xc8); // točka X1L

Serial.write(0x00); // točka Y1H

Serial.write(0xc8); // točka Y1L

Serial.write(0x01); // točka X2H

Serial.write(0x2C); // točka X2L.

Serial.write(0x00); // točka Y2H

Serial.write(0xC8); // točka Y2L

Serial.write(0x00); // točka X3H

Serial.write(0xFA); // točka X3L

Serial.write(0x00); // točka Y3H

Serial.write(0x64); // točkaY3L

Serial.write(0x00); // točka X1H

Serial.write(0xc8); // točka X1L

Serial.write(0x00); // točka Y1H

Serial.write(0xc8); // točka Y1L

//napolni—–

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

Serial.write(0x5A); //"5A" je 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // naslovH osnovne grafične strani2

Serial.write(0x00); // naslovL osnovne grafike pabe2

Serial.write(0x00); // Izpolni pravokotnik CMD

Serial.write(0x04); // Izpolni pravokotnik CMD

Serial.write(0x00); // številka pravokotnika

Serial.write(0x01); // Številka pravokotnika

Serial.write(0x00); // točka X1H

Serial.write(0x0A); // točka X1L

Serial.write(0x00); // točka Y1H

Serial.write(0x50); // točkaY1L

Serial.write(0x02); // točka X2H

Serial.write(0x76); // točka X2L.

Serial.write(0x01); // točka Y2H

Serial.write(0x90); // točkaY2L

Serial.write(0xF0); // Rdeča barvaH

Serial.write(0x00); // Rdeča barvaL

}

//——————————————Rdeča je konec———————————————

//——————————————Rumena in lok se začne———————————————

if( iNum == 2){ // lok! in rumena!

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

Serial.write(0x5A); //"5A" je 90

Serial.write(0x13);

Serial.write(0x82);

Serial.write(0x10); // naslovH osnovne grafične strani1

Serial.write(0x00); // naslovL osnovne grafike pabe1

Serial.write(0x00); // Naredi lok CMD

Serial.write(0x0B); // Naredi lok CMD

Serial.write(0x00); // številka loka

Serial.write(0x01); // Številka loka.

Serial.write(0x00); // barvaH črna

Serial.write(0x00); // barvaL prazna

Serial.write(0x01); // središče kroga XH

Serial.write(0x2c); // središče kroga XL

Serial.write(0x00); // središče kroga YH

Serial.write(0xc8); // središče kroga YL

Serial.write(0x00); // RH

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

Serial.write(0x02); // Kot1H

Serial.write(0x76); // Kot1L

Serial.write(0x00); // Kot2H

Serial.write(0x5A); // Kot2L

//napolni—–

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

Serial.write(0x5A); //"5A" je 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // naslovH osnovne grafične strani2

Serial.write(0x00); // naslovL osnovne grafike pabe2

Serial.write(0x00); // Izpolni pravokotnik CMD

Serial.write(0x04); // Izpolni pravokotnik CMD

Serial.write(0x00); // številka pravokotnika

Serial.write(0x01); // Številka pravokotnika

Serial.write(0x00); // točka X1H

Serial.write(0x0A); // točka X1L

Serial.write(0x00); // točka Y1H

Serial.write(0x50); // točkaY1L

Serial.write(0x02); // točka X2H

Serial.write(0x76); // točka X2L.

Serial.write(0x01); // točka Y2H

Serial.write(0x90); // točkaY2L

Serial.write(0xFF); // Rumena barvaH

Serial.write(0x60); // Rumena barvaL

}

//——————————————Rumena in lok je konec———————————————

//————————————— Zelena in pravokotnik se začneta———————————————

if( iNum == 3){ // pravokotnik! in zeleno!

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

Serial.write(0x5A); //"5A" je 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x10); // naslovH osnovne grafične strani1

Serial.write(0x00); // naslovL osnovne grafike pabe1

Serial.write(0x00); // Naredite pravokotnik CMD

Serial.write(0x03); // Naredite pravokotnik CMD

Serial.write(0x00); // številka pravokotnika

Serial.write(0x01); // Številka pravokotnika

Serial.write(0x01); // točka X1H

Serial.write(0x54); // točka X1L

Serial.write(0x00); // točka Y1H

Serial.write(0xED); // točka Y1L

Serial.write(0x02); // točka X2H

Serial.write(0x49); // točka X2L.

Serial.write(0x01); // točka Y2H

Serial.write(0x54); // točkaY2L

Serial.write(0x00); // barvaH črna

Serial.write(0x00); // barvaL prazna

//napolni—–

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

Serial.write(0x5A); //"5A" je 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // naslovH osnovne grafične strani2

Serial.write(0x00); // naslovL osnovne grafike pabe2

Serial.write(0x00); // Izpolni pravokotnik CMD

Serial.write(0x04); // Izpolni pravokotnik CMD

Serial.write(0x00); // številka pravokotnika

Serial.write(0x01); // Številka pravokotnika

Serial.write(0x00); // točka X1H

Serial.write(0x0A); // točka X1L

Serial.write(0x00); // točka Y1H

Serial.write(0x50); // točkaY1L

Serial.write(0x02); // točka X2H

Serial.write(0x76); // točka X2L.

Serial.write(0x01); // točka Y2H

Serial.write(0x90); // točkaY2L

Serial.write(0x2F); // Zelena barvaH

Serial.write(0x60); // Zelena barvaL

}

//————————————— Zelena in pravokotnik je konec———————————————

//——————————————Oranžna in kvadrat se začneta———————————————

if( iNum == 4){ // kvadrat! in oranžna!

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

Serial.write(0x5A); //"5A" je 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x10); // naslovH osnovne grafične strani1

Serial.write(0x00); // naslovL osnovne grafike pabe1

Serial.write(0x00); // Naredite pravokotnik CMD

Serial.write(0x03); // Naredite pravokotnik CMD

Serial.write(0x00); // številka pravokotnika

Serial.write(0x01); // Številka pravokotnika

Serial.write(0x01); // točka X1H

Serial.write(0x54); // točka X1L

Serial.write(0x00); // točka Y1H

Serial.write(0x91); // točkaY1L

Serial.write(0x02); // točka X2H

Serial.write(0x49); // točka X2L.

Serial.write(0x01); // točka Y2H

Serial.write(0x86); // točkaY2L

Serial.write(0x00); // barvaH črna

Serial.write(0x00); // barvaL prazna

//napolni—–

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

Serial.write(0x5A); //"5A" je 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // naslovH osnovne grafične strani2

Serial.write(0x00); // naslovL osnovne grafike pabe2

Serial.write(0x00); // Izpolni pravokotnik CMD

Serial.write(0x04); // Izpolni pravokotnik CMD

Serial.write(0x00); // številka pravokotnika

Serial.write(0x01); // Številka pravokotnika

Serial.write(0x00); // točka X1H

Serial.write(0x0A); // točka X1L

Serial.write(0x00); // točka Y1H

Serial.write(0x50); // točkaY1L

Serial.write(0x02); // točka X2H

Serial.write(0x76); // točka X2L.

Serial.write(0x01); // točka Y2H

Serial.write(0x90); // točkaY2L

Serial.write(0xFD); // oranžna barvaH

Serial.write(0x60); // oranžna barvaL

}

//—————————————Oranžna in kvadrat je konec———————————————

//——————————————Modra in krog se začne———————————————

if( iNum == 5){ // krog! in modra!

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

Serial.write(0x5A); //"5A" je 90

Serial.write(0x0F);

Serial.write(0x82);

Serial.write(0x10); // naslovH osnovne grafične strani1

Serial.write(0x00); // naslovL osnovne grafike pabe1

Serial.write(0x00); // Obkroži CMD

Serial.write(0x05); // Obkroži CMD

Serial.write(0x00); // številka kroga

Serial.write(0x01); // Številka kroga

Serial.write(0x01); // središče kroga XH

Serial.write(0xD6); // središče kroga XL

Serial.write(0x00); // središče kroga YH

Serial.write(0xc8); // središče kroga YL

Serial.write(0x00); // RH

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

Serial.write(0x00); // barvaH črna

Serial.write(0x00); // barvaL prazna

//napolni—–

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

Serial.write(0x5A); //"5A" je 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // naslovH osnovne grafične strani2

Serial.write(0x00); // naslovL osnovne grafike pabe2

Serial.write(0x00); // Izpolni pravokotnik CMD

Serial.write(0x04); // Izpolni pravokotnik CMD

Serial.write(0x00); // številka pravokotnika

Serial.write(0x01); // Številka pravokotnika

Serial.write(0x00); // točka X1H

Serial.write(0x0A); // točka X1L

Serial.write(0x00); // točka Y1H

Serial.write(0x50); // točkaY1L

Serial.write(0x02); // točka X2H

Serial.write(0x76); // točka X2L.

Serial.write(0x01); // točka Y2H

Serial.write(0x90); // točkaY2L

Serial.write(0x00); // modra barvaH

Serial.write(0xFF); // modra barvaL

}

//——————————————Modra in krog je konec———————————————

Končno, spletno odpravljanje napak.

STONE TOOLBox (programska oprema za oblikovanje GUI) bo uredil prenos datoteke zaslona, ​​nalaganje datoteke kode arduino, priključil napajalnik, komunikacijo, vklopil, da bo opazoval risbo slike in spremembo barve, da bi dosegel želeni učinek.

Koda, prikazana v videoposnetku, je naslednja.

(poskusi spletne nastavitve)

Vir: Plato Data Intelligence