IDO

Démonstration d'alphabétisation pour l'apprentissage précoce de l'IHM série Arduino de STONE

Le Contrôle graphique de base de l'écran série STONE, vous pouvez dessiner des lignes, des triangles, des polygones, des rectangles, des carrés, des cercles, des arcs, des couleurs de remplissage, couper et coller, etc.

La conception d'une machine d'apprentissage précoce utilisant l'écran tactile série STVI056WT-01, pour identifier les formes en regardant les images, reconnaître les mots en fonction des couleurs, et concevoir un format de divertissement pour déterminer les erreurs correctes, marquer ou passer le niveau, pour que les enfants apprennent à reconnaître les couleurs, à comprendre les formes de base et à apprendre les mots correspondants de manière détendue et ludique.

La présentation vidéo officielle ne donne pas l'effet réel du contrôle graphique de base, donc cette démo le complétera. Les instructions de dessin sont transmises par la communication entre le carte de contrôle arduino et par éboulis série STONEn.

De plus, cette note n'inclut pas le contenu fonctionnel complet du contrôle graphique de base, seules les fonctions utilisées dans l'utilisation de l'élaboration, les enregistrées sont testées sur la machine OK, vous pouvez directement télécharger la démo.

L'environnement matériel de la démonstration est illustré à la figure 1, à la figure 2 et à la figure 3.

STONE est officiellement livré avec 2 cartes, parmi lesquelles, la carrée est une carte de téléchargement USB et la longue est une carte de communication USB vers série (et une alimentation DC12V pour l'écran série).

(Figure 1 : Communication et connexion d'alimentation de l'écran série STONE) (Figure 2 : Schéma de connexion pour le téléchargement des fichiers de contrôle Basic Graphics depuis l'écran STONE)

(Figure 3 : connexion TX, RX, GND entre la carte de communication d'écran série STONE et la carte de développement arduino)

(Figure 4 : zone de dessin de contrôle graphique de base et adresse variable et autres paramètres)

Après avoir sélectionné le contrôle Basicgraphics dans le menu Configuration des variables (D) de STONE TOOLBox (logiciel GUI Design) et défini la zone de dessin et les paramètres d'adresse de variable, l'instruction 0x82 est utilisée pour écrire dans l'adresse de mémoire variable définie (0x1000 est défini ici) Après avoir défini les paramètres de zone de dessin et d'adresse de variable, l'instruction 0x82 est utilisée pour écrire CMD + Data_pack_Num_Max + Data dans l'adresse de mémoire variable définie (0x1000 dans ce cas) pour terminer la mise en œuvre des fonctions de dessin. Le code de fonction spécifique est illustré à la figure 6, où il y a une instruction de dessin au trait 0x0002, en utilisant l'exemple suivant.

(Figure 5 : Format de commande de données de contrôle graphique de base)

(Figure 6 : Illustration des commandes de tracé de ligne et de rectangle pour le contrôle graphique de base)

Instruction de dessin au trait 0x0002, exemple d'utilisation.

Pour connecter une ligne noire des coordonnées (340, 200) aux coordonnées (585, 200), l'instruction est

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

Tracez trois lignes noires fermées dans un triangle avec trois sommets aux coordonnées (200, 200), (300, 200), (250, 100), et l'instruction est

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

Le 0x1000 ci-dessus est l'adresse variable du contrôle graphique de base, 0x0002 est le code d'instruction, 0x0001 et 0x0003 sont respectivement 1 ligne et 3 lignes, 0x0000 est le code couleur, la valeur 0000 est noir et la valeur ffff est blanc brillant. Autres coordonnées XY instantanées de chaque point.

Exemple de dessin d'un rectangle.

Coordonnées du sommet supérieur gauche du rectangle (340, 237), coordonnées du sommet inférieur droit (585, 340) de couleur noire, la commande est

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

Tracez simultanément deux rectangles (340, 237) – (585, 340), (324, 221) – (601, 356), la commande est

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

Le 0x1000 ci-dessus est l'adresse variable du contrôle graphique de base, 0x0003 est le code de commande du rectangle, 0x0001, 0x0002 sont 1 rectangle, 2 rectangles, 0x0000, 0xffff est le code de couleur, la valeur de 0000 est noire, la valeur de fffff est lumineuse blanche. Les autres sont les coordonnées XY du sommet supérieur gauche et du sommet inférieur droit de chaque rectangle.

(Figure 7 : commandes de remplissage de rectangle et de dessin de cercle pour le contrôle des graphiques de base)

Exemple de remplissage de rectangle.

La commande de remplissage du rectangle noir (470, 200) ~ (550 ,255) est

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

Exemple de dessin d'un cercle.

Le centre du cercle (470, 200), R = 50 noir, l'instruction est

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

Pour tracer deux cercles en même temps, centre A (470, 200) R=50 et centre B (256, 200) R=80, tous deux en noir, la commande est

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

(Figure 8 : commande Arc pour le contrôle graphique de base)

La résolution de l'arc est de 0.5 degré, 360 degrés correspond à 720 et 0 degré est dans la direction verticale ascendante.

Exemple d'arc.

L'arc supérieur 315 degrés pour commencer – 45 degrés pour terminer, le centre du cercle (300, 200) R = 80, noir, la commande est

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

Concernant les couleurs.

0x0000 est noir 0xffff est blanc 0x00ff est bleu 0xf000 est rouge 0xfd60 est orange

0xff60 est jaune 0x2f60 est vert

(Figure 9 : paramètres et adresses de la planche à dessin de l'interface de forme de contrôle graphique de base)

(Figure 10 : Paramètres et adresses de la planche à dessin de l'interface de couleur de contrôle graphique de base)

Selon l'adresse variable, la commande pour remplir la couleur verte pour (10, 80) ~ (630, 400) est

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

Autres similitudes, voir le code du programme pour plus de détails.

Le code démontré dans la vidéo est le suivant.

/*

frank10

STONE et arduino COMM, les graphismes de base jouent au programme.

Allume une LED pendant une seconde, puis s'éteint pendant une seconde, à plusieurs reprises. La LED nous dit que le fonctionnement en douceur est correct !

L'échantillon a deux pages. La page1 est la forme, la page2 est la couleur !

Cet exemple de code se trouve dans le fichier de frank. 20210625

*/

// La broche 13 a une LED connectée sur la plupart des cartes Arduino.

// donne lui un nom:

led int = 13;

int iYePian = 0; //0x0020 pour Le numéro de YePian !

//int iGongLu = 0; //x0 pour le GongLu !

//int iLiuLiang = 0; //0x0160 pour le maintenant LiuLiang !

entier iJiao = 0; // 0x0260 pour le JieJuJiao !

int iGongLuEau = 0; //0x0280 pour The Water GongLu! la valeur est 0-50000 !

int iled = 1; //délai num.

int iLed2 = 1 ; //délai num. 50 ms font un point.

int iLed3 = 0 ; //délai num. 50 ms font un point.

int iLed4 = 0 ; //délai num. 50 ms font un point.

int iCurve0 = 0; //La valeur de courbe0. 50 ms font un point.

int iCurve1 = 0; //La valeur de courbe1,. 50 ms font un point.

int iFlag0 = 1 ; // Le drapeau de la courbe0 + ou -; .1 est en hausse, 0 est en baisse.

int iFlag1 = 1 ; // Le drapeau de la courbe1 + ou -; .1 est en hausse, 0 est en baisse.

entier iNum = 0 ; //lire dans char num.

entier iNum2 = 0 ; // lire dans le caractère num2 pour ShuiDianZhan !

//int iPower = 2; //statue clé 0x0009

//int iMode = 2; //statue clé 0x000A

int iPowerWater = 2; //statue clé 0x0039

// la routine de configuration s'exécute une fois lorsque vous appuyez sur reset:

void setup() {

// initialise la broche numérique en tant que sortie.

pinMode (led, SORTIE);

Serial.begin(115200); // Ouvrir la fonction de communication série et attendre que le port série s'ouvre

tandis que (!Série) {

; // attend que le port série se connecte. Nécessaire pour Leonardo seulement

}

}

// la routine de boucle s'exécute encore et encore pour toujours:

boucle vide () {

int inChar ;

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

si (iLed == 800) {

//——- lire la valeur 0x0039———-

Serial.write (0xA5) ; //"A5" vaut 165

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

Serial.write(0x04); //longueur

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

Serial.write(0x00); // adresse de la clé d'alimentation ShuiDianZhan !

Serial.write (0x39); // adresse de la clé d'alimentation ShuiDianZhan !

Serial.write(0x01); // 0x0039 (touche d'alimentation)

//———La valeur de retour de PIERRE sera "A5 5A 06 83 00 39 01 00 01"——

}

// Lecture des informations envoyées par le port série :

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

/*

enregistrer un bak.

car peut avoir une clé de lecture et avoir un travail de clé.

le programme est une IHM qu'une touche d'entrée fait un travail de péplos.

*/

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

//—————————-0x0039 début de lecture de la clé———————————–

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 ;

si(iPowerWater != 1){

iPowerWater = 1 ; //allumer!

iJiao = 0 ;

iGongLuEau = 0 ;

}

}

if ((inChar == 0x02)&&(iNum2 == 3)) {

iNum2 = 0 ;

iPowerWater = 2 ; //éteindre!

}

//—————— 0x0039 clé lecture ok! iPowerWater ok!—————————-

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

délai (1);

LED += 1 ;

iLed2 += 1 ; // 50ms font un point.

//———————————————————————————————–

//———————————50ms faire un point commence————————————–

si (iLed2 == 50) {

iLed2 = 1 ;

iLed4 += 1 ; // 50ms font un point.

si(iFlag0 == 1){

iCourbe0 += 1 ; // 50ms font un point.

if(iCurve0 >= 150){

iFlag0 = 0 ; // L'iCurve0 baisse !.

}

}

si(iFlag0 == 0){

iCourbe0 -= 1 ; // 50ms font un point.

if(iCurve0 <= 1){

iFlag0 = 1 ; // L'iCurve0 s'affiche !.

}

}

si(iFlag1 == 1){

if(iLed4 >= 3){

iCourbe1 += 1 ; // 50ms font un point.

iLed4 = 0 ;

}

if(iCurve1 >= 50){

iFlag1 = 0 ; // L'iCurve1 baisse !.

}

}

si(iFlag1 == 0){

if(iLed4 >= 3){

iLed4 = 0 ;

iCourbe1 -= 1 ; // 50ms font un point.

}

if(iCurve1 <= 1){

iFlag1 = 1 ; // L'iCurve1 s'affiche !.

}

}

Serial.write (0xA5) ; //"A5" vaut 165

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

Serial.write (0x06);

Serial.write (0x84); //écrire dans la courbe !

Serial.write(0x03); // Le chemin de la courbe,

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

Serial.write (0x00);

Serial.write(iCurve1) ;

Serial.write (0x00);

}

//——————————-50ms faire le point fin—————————————

//———————————————————————————————-

si (iLed == 500) {

digitalWrite (led, HAUT); // allume la LED (HIGH est le niveau de tension)

//délai (500); // attendez une seconde, Plage : 200-2000

}

si (iLed >= 1000) {

digitalWrite(led, LOW); // éteint la LED en rendant la tension FAIBLE

//délai (500); // attend une seconde, plage : 200-2000

iLed = 1 ;

si( iNum <= 6 ) iNum += 1; //tour de forme !

si( iNum == 6 ) iNum = 0; //tour de forme !

//————————————–Le rouge est commencer—————————————–

if( iNum == 1){ // triangle ! Et rouge!

Serial.write (0xA5) ; //"A5" vaut 165

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

Serial.write (0x19);

Serial.write (0x82);

Serial.write(0x10); // adresseH des graphiques de base

Serial.write(0x00); // adresseL des graphiques de base

Serial.write(0x00); // Faire la ligne CMD

Serial.write(0x02); // Faire la ligne CMD

Serial.write(0x00); // le numéro de la ligne

Serial.write(0x03); // Le numéro de la ligne.

Serial.write(0x00); //couleurH noir

Serial.write(0x00); //couleurL

Serial.write(0x00); // pointX1H

Serial.write(0xc8) ; // pointX1L

Serial.write(0x00); // pointY1H

Serial.write(0xc8) ; // pointY1L

Serial.write(0x01); // pointX2H

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

Serial.write(0x00); // pointY2H

Serial.write(0xC8) ; // pointY2L

Serial.write(0x00); // pointX3H

Serial.write(0xFA); // pointX3L

Serial.write(0x00); // pointY3H

Serial.write (0x64); // pointY3L

Serial.write(0x00); // pointX1H

Serial.write(0xc8) ; // pointX1L

Serial.write(0x00); // pointY1H

Serial.write(0xc8) ; // pointY1L

//remplir--

Serial.write (0xA5) ; //"A5" vaut 165

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

Serial.write (0x11);

Serial.write (0x82);

Serial.write (0x60); // adresseH de la page graphique de base2

Serial.write(0x00); // adresseL des graphiques de base pabe2

Serial.write(0x00); // Remplir le rectangle CMD

Serial.write(0x04); // Remplir le rectangle CMD

Serial.write(0x00); // le numéro du rectangle

Serial.write(0x01); // Le numéro du rectangle

Serial.write(0x00); // pointX1H

Serial.write (0x0A); // pointX1L

Serial.write(0x00); // pointY1H

Serial.write (0x50); // pointY1L

Serial.write(0x02); // pointX2H

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

Serial.write(0x01); // pointY2H

Serial.write (0x90); // pointY2L

Serial.write(0xF0); // Couleur rougeH

Serial.write(0x00); // Couleur rougeL

}

//————————————–Le rouge est fin—————————————–

//————————————–Le jaune et l'arc commence——————————————–

if( iNum == 2){ // arc! et jaune !

Serial.write (0xA5) ; //"A5" vaut 165

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

Serial.write (0x13);

Serial.write (0x82);

Serial.write (0x10); // adresseH de la page graphique de base1

Serial.write(0x00); // adresseL des graphiques de base pabe1

Serial.write(0x00); // Faire l'arc CMD

Serial.write(0x0B); // Faire l'arc CMD

Serial.write(0x00); // le numéro de l'arc

Serial.write(0x01); // Le numéro de l'arc.

Serial.write(0x00); // couleurH noir

Serial.write(0x00); // couleurL vide

Serial.write(0x01); // centre du cercle XH

Serial.write(0x2c); // centre du cercle XL

Serial.write(0x00); // centre du cercle YH

Serial.write(0xc8) ; // centre du cercle YL

Serial.write(0x00); // HR

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

Serial.write(0x02); // Angle1H

Serial.write (0x76); // Angle1L

Serial.write(0x00); // Angle2H

Serial.write (0x5A); // Angle2L

//remplir--

Serial.write (0xA5) ; //"A5" vaut 165

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

Serial.write (0x11);

Serial.write (0x82);

Serial.write (0x60); // adresseH de la page graphique de base2

Serial.write(0x00); // adresseL des graphiques de base pabe2

Serial.write(0x00); // Remplir le rectangle CMD

Serial.write(0x04); // Remplir le rectangle CMD

Serial.write(0x00); // le numéro du rectangle

Serial.write(0x01); // Le numéro du rectangle

Serial.write(0x00); // pointX1H

Serial.write (0x0A); // pointX1L

Serial.write(0x00); // pointY1H

Serial.write (0x50); // pointY1L

Serial.write(0x02); // pointX2H

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

Serial.write(0x01); // pointY2H

Serial.write (0x90); // pointY2L

Serial.write(0xFF); // Couleur jauneH

Serial.write (0x60); // Couleur jauneL

}

//————————————–Le jaune et l'arc est fin——————————————–

//————————————–Le vert et le rectangle commence——————————————–

if( iNum == 3){ // rectangle ! et vert !

Serial.write (0xA5) ; //"A5" vaut 165

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

Serial.write (0x11);

Serial.write (0x82);

Serial.write (0x10); // adresseH de la page graphique de base1

Serial.write(0x00); // adresseL des graphiques de base pabe1

Serial.write(0x00); // Faire le rectangle CMD

Serial.write(0x03); // Faire le rectangle CMD

Serial.write(0x00); // le numéro du rectangle

Serial.write(0x01); // Le numéro du rectangle

Serial.write(0x01); // pointX1H

Serial.write (0x54); // pointX1L

Serial.write(0x00); // pointY1H

Serial.write(0xED); // pointY1L

Serial.write(0x02); // pointX2H

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

Serial.write(0x01); // pointY2H

Serial.write (0x54); // pointY2L

Serial.write(0x00); // couleurH noir

Serial.write(0x00); // couleurL vide

//remplir--

Serial.write (0xA5) ; //"A5" vaut 165

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

Serial.write (0x11);

Serial.write (0x82);

Serial.write (0x60); // adresseH de la page graphique de base2

Serial.write(0x00); // adresseL des graphiques de base pabe2

Serial.write(0x00); // Remplir le rectangle CMD

Serial.write(0x04); // Remplir le rectangle CMD

Serial.write(0x00); // le numéro du rectangle

Serial.write(0x01); // Le numéro du rectangle

Serial.write(0x00); // pointX1H

Serial.write (0x0A); // pointX1L

Serial.write(0x00); // pointY1H

Serial.write (0x50); // pointY1L

Serial.write(0x02); // pointX2H

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

Serial.write(0x01); // pointY2H

Serial.write (0x90); // pointY2L

Serial.write (0x2F); // Couleur verteH

Serial.write (0x60); // Couleur verteL

}

//————————————–Le vert et le rectangle est fin——————————————–

//————————————–L'orange et le carré commence——————————————–

if( iNum == 4){ // carré ! et oranges !

Serial.write (0xA5) ; //"A5" vaut 165

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

Serial.write (0x11);

Serial.write (0x82);

Serial.write (0x10); // adresseH de la page graphique de base1

Serial.write(0x00); // adresseL des graphiques de base pabe1

Serial.write(0x00); // Faire le rectangle CMD

Serial.write(0x03); // Faire le rectangle CMD

Serial.write(0x00); // le numéro du rectangle

Serial.write(0x01); // Le numéro du rectangle

Serial.write(0x01); // pointX1H

Serial.write (0x54); // pointX1L

Serial.write(0x00); // pointY1H

Serial.write (0x91); // pointY1L

Serial.write(0x02); // pointX2H

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

Serial.write(0x01); // pointY2H

Serial.write (0x86); // pointY2L

Serial.write(0x00); // couleurH noir

Serial.write(0x00); // couleurL vide

//remplir--

Serial.write (0xA5) ; //"A5" vaut 165

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

Serial.write (0x11);

Serial.write (0x82);

Serial.write (0x60); // adresseH de la page graphique de base2

Serial.write(0x00); // adresseL des graphiques de base pabe2

Serial.write(0x00); // Remplir le rectangle CMD

Serial.write(0x04); // Remplir le rectangle CMD

Serial.write(0x00); // le numéro du rectangle

Serial.write(0x01); // Le numéro du rectangle

Serial.write(0x00); // pointX1H

Serial.write (0x0A); // pointX1L

Serial.write(0x00); // pointY1H

Serial.write (0x50); // pointY1L

Serial.write(0x02); // pointX2H

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

Serial.write(0x01); // pointY2H

Serial.write (0x90); // pointY2L

Serial.write(0xFD); // couleur orangeH

Serial.write (0x60); // couleur orangeL

}

//————————————–L'orange et le carré est fin——————————————–

//————————————–Le bleu et le cercle commence——————————————–

if( iNum == 5){ // cercle ! et bleu !

Serial.write (0xA5) ; //"A5" vaut 165

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

Série.write(0x0F);

Serial.write (0x82);

Serial.write (0x10); // adresseH de la page graphique de base1

Serial.write(0x00); // adresseL des graphiques de base pabe1

Serial.write(0x00); // Encerclez CMD

Serial.write(0x05); // Encerclez CMD

Serial.write(0x00); // le numéro du cercle

Serial.write(0x01); // Le numéro du cercle

Serial.write(0x01); // centre du cercle XH

Serial.write (0xD6) ; // centre du cercle XL

Serial.write(0x00); // centre du cercle YH

Serial.write(0xc8) ; // centre du cercle YL

Serial.write(0x00); // HR

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

Serial.write(0x00); // couleurH noir

Serial.write(0x00); // couleurL vide

//remplir--

Serial.write (0xA5) ; //"A5" vaut 165

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

Serial.write (0x11);

Serial.write (0x82);

Serial.write (0x60); // adresseH de la page graphique de base2

Serial.write(0x00); // adresseL des graphiques de base pabe2

Serial.write(0x00); // Remplir le rectangle CMD

Serial.write(0x04); // Remplir le rectangle CMD

Serial.write(0x00); // le numéro du rectangle

Serial.write(0x01); // Le numéro du rectangle

Serial.write(0x00); // pointX1H

Serial.write (0x0A); // pointX1L

Serial.write(0x00); // pointY1H

Serial.write (0x50); // pointY1L

Serial.write(0x02); // pointX2H

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

Serial.write(0x01); // pointY2H

Serial.write (0x90); // pointY2L

Serial.write(0x00); // couleur bleueH

Serial.write(0xFF); // couleur bleueL

}

//————————————–Le bleu et le cercle est fin——————————————–

Enfin, le débogage en ligne.

STONE TOOLBox (logiciel GUI Design) modifiera le téléchargement du fichier d'écran, le téléchargement du fichier de code arduino, connectera l'alimentation, la communication, la mise sous tension pour observer le dessin de l'image et le changement de couleur, pour obtenir l'effet souhaité.

Le code démontré dans la vidéo est le suivant.

(tentatives de réglage en ligne)

Source : Platon Data Intelligence