IOT

STONE serial HMI Arduino demonstrație de alfabetizare a învățării timpurii

Utilizarea Controlul grafic de bază din ecranul serial STONE, puteți desena linii, triunghiuri, poligoane, dreptunghiuri, pătrate, cercuri, arce, culori de umplere, tăiați și lipiți și așa mai departe.

Proiectarea unei mașini de învățare timpurie folosind ecranul tactil serial STVI056WT-01, pentru a identifica formele uitându-se la imagini, pentru a recunoaște cuvintele în funcție de culori și pentru a proiecta un format de divertisment pentru a determina erorile corecte, a nota sau a trece nivelul, astfel încât copiii să învețe să recunoască culorile, să înțeleagă formele de bază și să învețe cuvintele corespunzătoare într-un mod relaxat și jucăuș.

Prezentarea video oficială nu oferă efectul real al controlului grafic de bază, așa că acest demo îl va completa. Instrucțiunile pentru desen sunt transmise prin comunicarea dintre placa de control arduino si Scree de serie STONEn.

În plus, această notă nu include conținutul funcțional complet al controlului grafic de bază, doar funcțiile utilizate în utilizarea elaborării, cele înregistrate sunt testate pe mașină OK, puteți descărca direct rulajul demo.

Mediul hardware pentru demonstrația este prezentat în Figura 1, Figura 2 și Figura 3.

STONE vine oficial cu 2 plăci, printre care, cea pătrată este o placă de descărcare USB, iar cea lungă este o placă de comunicare USB către serial (și sursă de alimentare DC12V pentru ecranul serial).

(Figura 1: Comunicarea și conectarea la alimentare a ecranului serial STONE) (Figura 2: Diagrama de conectare pentru descărcarea fișierelor de control Basic Graphics de pe ecranul STONE)

(Figura 3: conexiune TX, RX, GND între placa de comunicare a ecranului serial STONE și placa de dezvoltare arduino)

(Figura 4: Zona de desen pentru controlul graficului de bază și adresa variabilă și alte setări ale parametrilor)

După selectarea controlului Basicgraphics din meniul STONE TOOLBox (software GUI Design) Configurație variabilă (D) și setarea zonei de desen și a parametrilor adresei variabile, instrucțiunea 0x82 este folosită pentru a scrie în adresa de memorie variabilă setată (0x1000 este setată aici) După setarea zonei de desen și a parametrilor de adresă variabilă, instrucțiunea 0x82 este utilizată pentru a scrie CMD + Data_pack_Num_Max + Data la adresa de memorie variabilă setată (0x1000 în acest caz) pentru a finaliza implementarea funcțiilor de desen. Codul funcției specifice este prezentat în Figura 6, unde există o instrucțiune de desen linie 0x0002, folosind următorul exemplu.

(Figura 5: Formatul de comandă a datelor de control grafic de bază)

(Figura 6: Ilustrarea comenzilor de linie de desen și dreptunghi pentru controlul grafic de bază)

Instrucțiune de desen 0x0002, exemplu de utilizare.

Pentru a conecta o linie neagră de la coordonatele (340, 200) la coordonatele (585, 200), instrucțiunea este

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

Desenați trei linii negre închise într-un triunghi cu trei vârfuri la coordonatele (200, 200), (300, 200), (250, 100), iar instrucțiunea este

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

0x1000 de mai sus este adresa variabilă a controlului grafic de bază, 0x0002 este codul de instrucțiune, 0x0001 și 0x0003 sunt 1 linie și, respectiv, 3 linii, 0x0000 este codul de culoare, valoarea 0000 este neagră și valoarea ffff este alb strălucitor. Alte coordonate XY instant ale fiecărui punct.

Exemplu de desenare a unui dreptunghi.

Coordonatele vârfurilor dreptunghiulare din stânga sus (340, 237), coordonatele vârfurilor din dreapta jos (585, 340) culoare negru, comanda este

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

Desenați simultan două dreptunghiuri (340, 237) – (585, 340), (324, 221) – (601, 356), comanda este

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

0x1000 de mai sus este adresa variabilă a controlului grafic de bază, 0x0003 este codul de comandă dreptunghi, 0x0001, 0x0002 sunt 1 dreptunghi, 2 dreptunghiuri, 0x0000, 0xffff este codul culorii, valoarea 0000 este neagră, valoarea fffff este strălucitoare alb. Celelalte sunt coordonatele XY ale vârfului din stânga sus și ale vârfului din dreapta jos ale fiecărui dreptunghi.

(Figura 7: Comenzi de umplere dreptunghi și de desenare cerc pentru controlul grafic de bază)

Exemplu de umplere dreptunghiulară.

Comanda de umplere dreptunghi negru (470, 200) ~ (550 ,255) este

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

Exemplu de desenare a unui cerc.

Centrul cercului (470, 200), R = 50 negru, instrucțiunea este

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

Pentru a desena două cercuri în același timp, centrul A (470, 200) R=50 și centrul B (256, 200) R=80, ambele în negru, comanda este

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

(Figura 8: Comanda Arc pentru controlul grafic de bază)

Rezoluția arcului este de 0.5 grade, 360 de grade corespunde cu 720 și 0 grade este în direcția verticală în sus.

Exemplu de arc.

Arcul superior 315 grade pentru a începe – 45 de grade pentru a se termina, centrul cercului (300, 200) R = 80, negru, comanda este

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

Referitor la culori.

0x0000 este negru 0xffff este alb 0x00ff este albastru 0xf000 este roșu 0xfd60 este portocaliu

0xff60 este galben 0x2f60 este verde

(Figura 9: Parametrii și adresele plăcii de desen ale interfeței de control grafic de bază)

(Figura 10: Parametrii plăcii de desen și adresele interfeței de culoare de control grafic de bază)

În funcție de adresa variabilei, comanda pentru a umple culoarea verde pentru (10, 80) ~ (630, 400) este

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

Alte asemănări, consultați codul programului pentru detalii.

Codul prezentat în videoclip este următorul.

/*

frank10

STONE și arduino COMM, grafica de bază joacă la program..

Pornește un LED pentru o secundă, apoi se stinge pentru o secundă, în mod repetat. LED-ul ne spune că funcționează ușor!

Eșantionul are două pagini. Pagina 1 este formă, pagina 2 este corlor!

Acest exemplu de cod este în fișierul lui Frank. 20210625

*/

// Pinul 13 are un LED conectat pe majoritatea plăcilor Arduino.

// dă-i un nume:

int led = 13;

int iYePian = 0; //0x0020 pentru numărul lui YePian!

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

//int iLiuLiang = 0; //0x0160 pentru The now LiuLiang!

int iJiao = 0; // 0x0260 pentru JieJuJiao!

int iGongLuWater = 0; //0x0280 pentru The Water GongLu! valoarea este 0-50000!

int iLed = 1; //timpul de întârziere num.

int iLed2 = 1; //timpul de întârziere num. 50 ms face un punct.

int iLed3 = 0; //timpul de întârziere num. 50 ms face un punct.

int iLed4 = 0; //timpul de întârziere num. 50 ms face un punct.

int iCurve0 = 0; //Valoarea curbei0. 50 ms face un punct.

int iCurve1 = 0; //Valoarea curbei1,. 50 ms face un punct.

int iFlag0 = 1; // Steagul curbei0 + sau -; .1 este în sus, 0 este în jos.

int iFlag1 = 1; // Steagul curbei1 + sau -; .1 este în sus, 0 este în jos.

int iNum = 0 ; //citește în char num.

int iNum2 = 0; //citește în char num2 pentru ShuiDianZhan!

//int iPower = 2; //statuie cheie 0x0009

//int iMode = 2; //statuie cheie 0x000A

int iPowerWater = 2; //statuie cheie 0x0039

// rutina de instalare rulează o dată când apăsați reset:

void setup () {

// inițializați pinul digital ca ieșire.

pinMode(led, OUTPUT);

Serial.begin(115200); // Deschideți funcția de comunicare serială și așteptați ca portul serial să se deschidă

în timp ce (!Serial) {

; // așteptați conectarea portului serial. Este necesar doar pentru Leonardo

}

}

// rutina de buclă rulează iar și iar pentru totdeauna:

bucla nulă () {

int inChar;

/*——————————————————————————-*/

dacă (iLed == 800) {

//——- citește valoarea 0x0039———-

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

Serial.write(0x5A); //”5A” este 90

Serial.write(0x04); //lungime

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

Serial.write(0x00); // adresa tastei de pornire ShuiDianZhan!

Serial.write(0x39); // adresa cheii de pornire ShuiDianZhan!

Serial.write(0x01); // 0x0039(tasta de pornire)

//———Valoarea de returnare STONE va fi „A5 5A 06 83 00 39 01 00 01 „——

}

// Citiți informațiile trimise de portul serial:

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

/*

salvează un bak.

deoarece poate avea o cheie de citire și o lucrare de cheie.

programul este un HMI care o tastă de intrare face o muncă de peplose.

*/

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

//—————————-0x0039 citire cheie începe————————————

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

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

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

dacă ((inChar == 0x01)&&(iNum2 == 3)) {

iNum2 = 0;

if(iPowerWater != 1){

iPowerWater = 1; //aprinde!

iJiao = 0;

iGongLuWater = 0;

}

}

dacă ((inChar == 0x02)&&(iNum2 == 3)) {

iNum2 = 0;

iPowerWater = 2; //oprire!

}

//—————— Tasta 0x0039 citită ok! iPowerWater ok!—————————-

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

întârziere (1);

iLed += 1;

iLed2 += 1; // 50 ms face un punct.

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

//———————————50ms face un punct începe—————————————

dacă (iLed2 == 50) {

iLed2 = 1;

iLed4 += 1; // 50 ms face un punct.

if(iFlag0 == 1){

iCurve0 += 1; // 50 ms face un punct.

if(iCurve0 >= 150){

iFlag0 = 0; // iCurve0 se întoarce!.

}

}

if(iFlag0 == 0){

iCurve0 -= 1; // 50 ms face un punct.

if(iCurve0 <= 1){

iFlag0 = 1; // iCurve0 apare!.

}

}

if(iFlag1 == 1){

if(iLed4 >= 3){

iCurve1 += 1; // 50 ms face un punct.

iLed4 = 0;

}

if(iCurve1 >= 50){

iFlag1 = 0; // iCurve1 se întoarce!.

}

}

if(iFlag1 == 0){

if(iLed4 >= 3){

iLed4 = 0;

iCurve1 -= 1; // 50 ms face un punct.

}

if(iCurve1 <= 1){

iFlag1 = 1; // iCurve1 apare!.

}

}

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

Serial.write(0x5A); //”5A” este 90

Serial.write(0x06);

Serial.write(0x84); //scrie la curbă!

Serial.write(0x03); // Calea curbei,

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

Serial.write(0x00);

Serial.write(iCurve1);

Serial.write(0x00);

}

//——————————--50ms se termină punctul——————————————

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

dacă (iLed == 500) {

digitalWrite(led, HIGH); // aprinde LED-ul (HIGH este nivelul de tensiune)

//întârziere(500); // așteptați o secundă, Interval: 200-2000

}

dacă (iLed >= 1000) {

digitalWrite(led, LOW); // stinge LED-ul făcând tensiunea LOW

//întârziere(500); // așteptați o secundă, interval: 200-2000

iLed = 1;

if( iNum <= 6 ) iNum += 1; //întoarce formă!

if( iNum == 6 ) iNum = 0; //întoarce formă!

//————————————–Roșul începe——————————————

if( iNum == 1){ // triunghi! si rosu!

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

Serial.write(0x5A); //”5A” este 90

Serial.write(0x19);

Serial.write(0x82);

Serial.write(0x10); // adresaH a Graficii de bază

Serial.write(0x00); // adresaL a graficelor de bază

Serial.write(0x00); // Efectuați linia CMD

Serial.write(0x02); // Efectuați linia CMD

Serial.write(0x00); // numărul liniei

Serial.write(0x03); // Numărul liniei.

Serial.write(0x00); //culoareH negru

Serial.write(0x00); //culoareL

Serial.write(0x00); // punctX1H

Serial.write(0xc8); // punctX1L

Serial.write(0x00); // punctY1H

Serial.write(0xc8); // punctY1L

Serial.write(0x01); // punctX2H

Serial.write(0x2C); // punctX2L.

Serial.write(0x00); // punctY2H

Serial.write(0xC8); // punctY2L

Serial.write(0x00); // punctX3H

Serial.write(0xFA); // punctX3L

Serial.write(0x00); // punctY3H

Serial.write(0x64); // punctY3L

Serial.write(0x00); // punctX1H

Serial.write(0xc8); // punctX1L

Serial.write(0x00); // punctY1H

Serial.write(0xc8); // punctY1L

//completati--

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

Serial.write(0x5A); //”5A” este 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresaH a paginii Basic graphics2

Serial.write(0x00); // adresaL de Basic graphics pabe2

Serial.write(0x00); // Completați dreptunghiul CMD

Serial.write(0x04); // Completați dreptunghiul CMD

Serial.write(0x00); // numărul dreptunghiului

Serial.write(0x01); // Numărul dreptunghiului

Serial.write(0x00); // punctX1H

Serial.write(0x0A); // punctX1L

Serial.write(0x00); // punctY1H

Serial.write(0x50); // punctY1L

Serial.write(0x02); // punctX2H

Serial.write(0x76); // punctX2L.

Serial.write(0x01); // punctY2H

Serial.write(0x90); // punctY2L

Serial.write(0xF0); // Culoare roșieH

Serial.write(0x00); // Culoare roșieL

}

//————————————–Roșul este sfârșit——————————————

//————————————–Galbenul și arcul începe——————————————–

if( iNum == 2){ // arc! si galben!

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

Serial.write(0x5A); //”5A” este 90

Serial.write(0x13);

Serial.write(0x82);

Serial.write(0x10); // adresaH a paginii Basic graphics1

Serial.write(0x00); // adresaL de Basic graphics pabe1

Serial.write(0x00); // Face arc CMD

Serial.write(0x0B); // Face arc CMD

Serial.write(0x00); // numărul arcului

Serial.write(0x01); // Numărul arcului.

Serial.write(0x00); // culoareH negru

Serial.write(0x00); // culoareL gol

Serial.write(0x01); // centrul cercului XH

Serial.write(0x2c); // centrul cercului XL

Serial.write(0x00); // centrul cercului YH

Serial.write(0xc8); // centrul cercului YL

Serial.write(0x00); // RH

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

Serial.write(0x02); // Unghiul 1H

Serial.write(0x76); // Unghi1L

Serial.write(0x00); // Unghiul 2H

Serial.write(0x5A); // Unghiul2L

//completati--

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

Serial.write(0x5A); //”5A” este 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresaH a paginii Basic graphics2

Serial.write(0x00); // adresaL de Basic graphics pabe2

Serial.write(0x00); // Completați dreptunghiul CMD

Serial.write(0x04); // Completați dreptunghiul CMD

Serial.write(0x00); // numărul dreptunghiului

Serial.write(0x01); // Numărul dreptunghiului

Serial.write(0x00); // punctX1H

Serial.write(0x0A); // punctX1L

Serial.write(0x00); // punctY1H

Serial.write(0x50); // punctY1L

Serial.write(0x02); // punctX2H

Serial.write(0x76); // punctX2L.

Serial.write(0x01); // punctY2H

Serial.write(0x90); // punctY2L

Serial.write(0xFF); // Culoare galbenăH

Serial.write(0x60); // Culoare galbenăL

}

//————————————–Galbenul și arcul se termină——————————————–

//————————————–Verdele și dreptunghiul încep——————————————–

if( iNum == 3){ // dreptunghi! si verde!

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

Serial.write(0x5A); //”5A” este 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x10); // adresaH a paginii Basic graphics1

Serial.write(0x00); // adresaL de Basic graphics pabe1

Serial.write(0x00); // Faceți CMD dreptunghi

Serial.write(0x03); // Faceți CMD dreptunghi

Serial.write(0x00); // numărul dreptunghiului

Serial.write(0x01); // Numărul dreptunghiului

Serial.write(0x01); // punctX1H

Serial.write(0x54); // punctX1L

Serial.write(0x00); // punctY1H

Serial.write(0xED); // punctY1L

Serial.write(0x02); // punctX2H

Serial.write(0x49); // punctX2L.

Serial.write(0x01); // punctY2H

Serial.write(0x54); // punctY2L

Serial.write(0x00); // culoareH negru

Serial.write(0x00); // culoareL gol

//completati--

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

Serial.write(0x5A); //”5A” este 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresaH a paginii Basic graphics2

Serial.write(0x00); // adresaL de Basic graphics pabe2

Serial.write(0x00); // Completați dreptunghiul CMD

Serial.write(0x04); // Completați dreptunghiul CMD

Serial.write(0x00); // numărul dreptunghiului

Serial.write(0x01); // Numărul dreptunghiului

Serial.write(0x00); // punctX1H

Serial.write(0x0A); // punctX1L

Serial.write(0x00); // punctY1H

Serial.write(0x50); // punctY1L

Serial.write(0x02); // punctX2H

Serial.write(0x76); // punctX2L.

Serial.write(0x01); // punctY2H

Serial.write(0x90); // punctY2L

Serial.write(0x2F); // Culoare verdeH

Serial.write(0x60); // Culoare verdeL

}

//————————————–Verdele și dreptunghiul sunt sfârșit——————————————–

//————————————–Portocalul și pătratul încep——————————————–

if( iNum == 4){ // pătrat! si portocaliu!

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

Serial.write(0x5A); //”5A” este 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x10); // adresaH a paginii Basic graphics1

Serial.write(0x00); // adresaL de Basic graphics pabe1

Serial.write(0x00); // Faceți CMD dreptunghi

Serial.write(0x03); // Faceți CMD dreptunghi

Serial.write(0x00); // numărul dreptunghiului

Serial.write(0x01); // Numărul dreptunghiului

Serial.write(0x01); // punctX1H

Serial.write(0x54); // punctX1L

Serial.write(0x00); // punctY1H

Serial.write(0x91); // punctY1L

Serial.write(0x02); // punctX2H

Serial.write(0x49); // punctX2L.

Serial.write(0x01); // punctY2H

Serial.write(0x86); // punctY2L

Serial.write(0x00); // culoareH negru

Serial.write(0x00); // culoareL gol

//completati--

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

Serial.write(0x5A); //”5A” este 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresaH a paginii Basic graphics2

Serial.write(0x00); // adresaL de Basic graphics pabe2

Serial.write(0x00); // Completați dreptunghiul CMD

Serial.write(0x04); // Completați dreptunghiul CMD

Serial.write(0x00); // numărul dreptunghiului

Serial.write(0x01); // Numărul dreptunghiului

Serial.write(0x00); // punctX1H

Serial.write(0x0A); // punctX1L

Serial.write(0x00); // punctY1H

Serial.write(0x50); // punctY1L

Serial.write(0x02); // punctX2H

Serial.write(0x76); // punctX2L.

Serial.write(0x01); // punctY2H

Serial.write(0x90); // punctY2L

Serial.write(0xFD); // culoare portocalieH

Serial.write(0x60); // culoare portocalieL

}

//————————————– Portocala și pătratul se termină——————————————–

//————————————– Albastrul și cercul este început——————————————–

if( iNum == 5){ // cerc! si albastru!

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

Serial.write(0x5A); //”5A” este 90

Serial.write(0x0F);

Serial.write(0x82);

Serial.write(0x10); // adresaH a paginii Basic graphics1

Serial.write(0x00); // adresaL de Basic graphics pabe1

Serial.write(0x00); // Faceți cerc CMD

Serial.write(0x05); // Faceți cerc CMD

Serial.write(0x00); // numărul cercului

Serial.write(0x01); // Numărul cercului

Serial.write(0x01); // centrul cercului XH

Serial.write(0xD6); // centrul cercului XL

Serial.write(0x00); // centrul cercului YH

Serial.write(0xc8); // centrul cercului YL

Serial.write(0x00); // RH

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

Serial.write(0x00); // culoareH negru

Serial.write(0x00); // culoareL gol

//completati--

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

Serial.write(0x5A); //”5A” este 90

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // adresaH a paginii Basic graphics2

Serial.write(0x00); // adresaL de Basic graphics pabe2

Serial.write(0x00); // Completați dreptunghiul CMD

Serial.write(0x04); // Completați dreptunghiul CMD

Serial.write(0x00); // numărul dreptunghiului

Serial.write(0x01); // Numărul dreptunghiului

Serial.write(0x00); // punctX1H

Serial.write(0x0A); // punctX1L

Serial.write(0x00); // punctY1H

Serial.write(0x50); // punctY1L

Serial.write(0x02); // punctX2H

Serial.write(0x76); // punctX2L.

Serial.write(0x01); // punctY2H

Serial.write(0x90); // punctY2L

Serial.write(0x00); // culoare albastrăH

Serial.write(0xFF); // culoare albastrăL

}

//————————————– Albastrul și cercul se termină——————————————–

În sfârșit, depanare online.

STONE TOOLBox (software-ul GUI Design) va edita descărcarea fișierului de ecran, încărcarea fișierului de cod Arduino, conectarea sursei de alimentare, comunicarea, pornirea pentru a observa desenul imaginii și schimbarea culorii, pentru a obține efectul dorit.

Codul prezentat în videoclip este următorul.

(încercări de reglare online)

Sursa: Plato Data Intelligence