IOT

STONE sorozatos HMI Arduino korai tanulási műveltségi bemutató

az Alapvető grafikus vezérlés A STONE soros képernyőn vonalakat, háromszögeket, sokszögeket, téglalapokat, négyzeteket, köröket, íveket rajzolhat, színeket tölthet ki, kivághat és beilleszthet stb.

Korai tanuló gép tervezése az STVI056WT-01 soros érintőképernyővel, alakzatok azonosítására a képek alapján, szavak színek szerinti felismerésére, valamint szórakoztató formátum tervezésére a helyes hibák meghatározásához, pontozáshoz vagy szint eléréséhez, hogy a gyerekek lazán, játékosan megtanulják felismerni a színeket, megértsék az alapvető formákat és megtanulják a megfelelő szavakat.

A hivatalos videóbemutató nem adja meg a Basic grafikus vezérlés tényleges hatását, ezért ez a bemutató kiegészíti azt. A rajzoláshoz szükséges utasítások a következő kommunikáción keresztül kerülnek továbbításra arduino vezérlőpanel és a STONE soros esztrichn.

Ezen túlmenően ez a megjegyzés nem tartalmazza a Basic grafikus vezérlő teljes funkcionális tartalmát, csak a kidolgozás használatánál használt funkciókat, a rögzítetteket a gépen teszteljük OK, közvetlenül letölthető a demo futtatás.

A demó hardverkörnyezete az 1., 2. és 3. ábrán látható.

A STONE hivatalosan 2 kártyával érkezik, amelyek közül a négyzetes egy USB letöltőkártya, a hosszú pedig egy USB-soros kommunikációs kártya (és DC12V tápegység a soros képernyőhöz).

(1. ábra: STONE soros képernyő kommunikációja és tápcsatlakozása) (2. ábra: Csatlakozási rajz Basic Graphics vezérlőfájlok letöltéséhez a STONE képernyőről)

(3. ábra: TX, RX, GND kapcsolat a STONE soros képernyős kommunikációs kártya és az arduino fejlesztőkártya között)

(4. ábra: Alapvető grafikus vezérlő rajzterület és változó cím és egyéb paraméterbeállítások)

Miután a STONE TOOLBox (GUI Design szoftver) menü Variable Configuration (D) menüjében kiválasztotta a Basicgraphics vezérlőt, és beállította a rajzterületet és a változó cím paramétereit, a 0x82 utasítással ír a beállított Változó memóriacímre (itt 0x1000 van beállítva). A rajzterület és a változó cím paramétereinek beállítása után a 0x82 utasítással a CMD + Data_pack_Num_Max + Data a beállított Változó memóriacímre (ebben az esetben 0x1000) írható a rajzi funkciók megvalósításának befejezéséhez. A konkrét funkciókód a 6. ábrán látható, ahol van egy 0x0002 vonalrajzi utasítás, a következő példával.

(5. ábra: Alapvető grafikus vezérlőadat-parancsformátum)

(6. ábra: A vonal és a téglalap rajzolási parancsainak illusztrációja az alapvető grafikus vezérléshez)

Vonalrajzolási utasítás 0x0002, használati példa.

A koordináták (340, 200) és a koordináták (585, 200) fekete vonalának összekapcsolásához az utasítás:

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

Rajzoljon három fekete vonalat háromszögbe zárva, amelynek három csúcsa a koordinátákon (200, 200), (300, 200), (250, 100), és az utasítás:

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

A fenti 0x1000 a Basic grafikus vezérlés változó címe, 0x0002 az utasításkód, 0x0001 és 0x0003 1 sor, illetve 3 sor, 0x0000 a színkód, a 0000 fekete, az ffff érték pedig élénk fehér. Az egyes pontok további azonnali XY koordinátái.

Példa téglalap rajzolására.

Téglalap bal felső csúcskoordinátái (340, 237), jobb alsó csúcskoordinátái (585, 340) fekete színűek, a parancs

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

Egyszerre rajzoljon két téglalapot (340, 237) – (585, 340), (324, 221) – (601, 356), a parancs:

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

A fenti 0x1000 a Basic grafikus vezérlés változó címe, 0x0003 a téglalap parancskód, 0x0001, 0x0002 1 téglalap, 2 téglalap, 0x0000, 0xffff a színkód, 0000 fff értéke fekete, fényes értéke fff fehér. A többi az egyes téglalapok bal felső és jobb alsó csúcsának XY koordinátái.

(7. ábra: Téglalap kitöltési és körrajzolási parancsok az alapvető grafikus vezérléshez)

Példa a téglalap kitöltésére.

A fekete téglalap kitöltése (470, 200) ~ (550) parancs

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

Példa kör rajzolására.

A kör középpontja (470, 200), R = 50 fekete, az utasítás az

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

Két kör egyidejű megrajzolásához az A középpont (470, 200) R=50 és a B középpont (256, 200) R=80, mindkettő feketével, a parancs:

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

(8. ábra: Ív parancs az alapvető grafikus vezérléshez)

Az ívfelbontás 0.5 fok, a 360 fok 720-nak felel meg, a 0 fok pedig függőleges felfelé mutató.

Ív példa.

A felső ív 315 fok az elejétől – 45 fok a végéig, a kör közepe (300, 200) R = 80, fekete, a parancs

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

A színekkel kapcsolatban.

0x0000 fekete 0xffff fehér 0x00ff kék 0xf000 piros 0xfd60 narancs

A 0xff60 sárga, a 0x2f60 pedig zöld

(9. ábra: Alapvető grafikus vezérlő alakzat interfész rajztábla paraméterei és címei)

(10. ábra: A Basic grafikus vezérlő színfelületének rajztábla paraméterei és címei)

A változó címének megfelelően a zöld szín kitöltésének parancsa (10, 80) ~ (630, 400)

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

Egyéb hasonlóságok, részletekért lásd a programkódot.

A videóban bemutatott kód a következő.

/*

frank10

A STONE és az arduino COMM, az alap grafikus játék a programban.

Egy LED-et egy másodpercre felkapcsol, majd egy másodpercre többször is kikapcsol. A LED jelzi, hogy a lágy futás rendben van!

A mintának két oldala van. Az 1. oldal alak, a 2. oldal szín!

Ez a példakód a frank fájlban található. 20210625

*/

// A 13. érintkező LED-je a legtöbb Arduino táblára csatlakozik.

// adjon nevet:

int led = 13;

int iYePian = 0; //0x0020 a The num of YePian!

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

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

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

int iGongLuWater = 0; //0x0280 – The Water GongLu! értéke 0-50000!

int iLed = 1; //késleltetési idő sz.

int iLed2 = 1; //késleltetési idő sz. Az 50 ms egy jót tesz.

int iLed3 = 0; //késleltetési idő sz. Az 50 ms egy jót tesz.

int iLed4 = 0; //késleltetési idő sz. Az 50 ms egy jót tesz.

int iGörbe0 = 0; //A görbe0 értéke. Az 50 ms egy jót tesz.

int iGörbe1 = 0; //A görbe1 értéke,. Az 50 ms egy jót tesz.

int iFlag0 = 1; // A görbe zászlója0 + vagy -; .1 felfelé, 0 lefelé.

int iFlag1 = 1; // A görbe zászlója1 + vagy -; .1 felfelé, 0 lefelé.

int iNum = 0 ; //olvasd be a char num.

int iNum2 = 0; //olvassa el a char num2-ben a ShuiDianZhan számára!

//int iPower = 2; //kulcs szobor 0x0009

//int iMode = 2; //kulcs szobor 0x000A

int iPowerWater = 2; //kulcs szobor 0x0039

// a beállítási rutin egyszer fut, amikor megnyomja a reset gombot:

void setup () {

// inicializálja a digitális tűt kimenetként.

pinMode(led, OUTPUT);

Serial.begin(115200); // Nyissa meg a soros kommunikációs funkciót, és várja meg, amíg megnyílik a soros port

while (!Serial) {

; // várja meg a soros port csatlakozását. Csak Leonardonak kell

}

}

// a ciklus rutin örökké újra és újra fut:

void loop () {

int inChar;

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

if (iLed == 800) {

//——- 0x0039 érték beolvasása———-

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

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

Serial.write(0x04); //hosszúság

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

Serial.write(0x00); // a ShuiDianZhan bekapcsológomb címe!

Serial.write(0x39); // a ShuiDianZhan bekapcsológomb címe!

Serial.write(0x01); // 0x0039 (bekapcsológomb)

//———A STONE visszatérési értéke „A5 5A 06 83 00 39 01 00 01”——

}

// Olvassa el a soros port által küldött információkat:

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

/*

ments meg egy bakot.

mert lehet olvasási kulcsa és kulcsműve.

a program egy HMI, amelynek beviteli kulcsa peplose munkát végez.

*/

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

//—————————-0x0039 kulcs olvasás kezdete————————————–

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; //bekapcsolás!

iJiao = 0;

iGongLuWater = 0 ;

}

}

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

iNum2 = 0;

iPowerWater = 2; //kikapcsolni!

}

//——————0x0039 kulcs olvasható rendben! iPowerWater rendben!—————————--

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

késleltetés (1);

iLed += 1;

iLed2 += 1; // Az 50 ms jót tesz.

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

//———————————50 ms pont kezdődik—————————————–

if (iLed2 == 50) {

iLed2 = 1;

iLed4 += 1; // Az 50 ms jót tesz.

if(iFlag0 == 1){

iGörbe0 += 1; // Az 50 ms jót tesz.

if(iGörbe0 >= 150){

iFlag0 = 0; // Az iCurve0 lefelé!.

}

}

if(iFlag0 == 0){

iGörbe0 -= 1; // Az 50 ms jót tesz.

if(iGörbe0 <= 1){

iFlag0 = 1; // Az iCurve0 felbukkan!.

}

}

if(iFlag1 == 1){

if(iLed4 >= 3){

iGörbe1 += 1; // Az 50 ms jót tesz.

iLed4 = 0;

}

if(iGörbe1 >= 50){

iFlag1 = 0; // Az iCurve1 lefelé!.

}

}

if(iFlag1 == 0){

if(iLed4 >= 3){

iLed4 = 0;

iGörbe1 -= 1; // Az 50 ms jót tesz.

}

if(iGörbe1 <= 1){

iFlag1 = 1; // Az iCurve1 felbukkan!.

}

}

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

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

Serial.write(0x06);

Serial.write(0x84); //görbére írd!

Serial.write(0x03); // A görbe útja,

Serial.write(iCurve0); N=1,

Serial.write(0x00);

Serial.write(iCurve1);

Serial.write(0x00);

}

//——————————-50 ms a pont végén——————————————

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

if (iLed == 500) {

digitalWrite(led, HIGH); // bekapcsolja a LED-et (HIGH a feszültségszint)

//delay(500); // várjon egy másodpercet, Tartomány: 200-2000

}

if (iLed >= 1000) {

digitalWrite(led, LOW); // kapcsolja ki a LED-et azáltal, hogy a feszültséget LOW

//delay(500); // várjon egy másodpercet, tartomány: 200-2000

iLed = 1;

if( iNum <= 6 ) iNum += 1; //forma fordulat!

if( iNum == 6 ) iNum = 0; //forma fordulat!

//————————————– Kezdődik a piros——————————————–

if( iNum == 1){ // háromszög! és piros!

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

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

Serial.write(0x19);

Serial.write(0x82);

Serial.write(0x10); // Basic grafika címe

Serial.write(0x00); // Basic grafika címe

Serial.write(0x00); // Végezze el a CMD sort

Serial.write(0x02); // Végezze el a CMD sort

Serial.write(0x00); // a sor száma

Serial.write(0x03); // A sor száma.

Serial.write(0x00); //színH fekete

Serial.write(0x00); //színL

Serial.write(0x00); // X1H pont

Serial.write(0xc8); // pontX1L

Serial.write(0x00); // Y1H pont

Serial.write(0xc8); // pontY1L

Serial.write(0x01); // X2H pont

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

Serial.write(0x00); // Y2H pont

Serial.write(0xC8); // pontY2L

Serial.write(0x00); // X3H pont

Serial.write(0xFA); // pontX3L

Serial.write(0x00); // Y3H pont

Serial.write(0x64); // pontY3L

Serial.write(0x00); // X1H pont

Serial.write(0xc8); // pontX1L

Serial.write(0x00); // Y1H pont

Serial.write(0xc8); // pontY1L

//tölt--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // Az alapvető grafikai oldal 2. címe

Serial.write(0x00); // Az alapgrafika pabe2 címeL

Serial.write(0x00); // CMD téglalap kitöltése

Serial.write(0x04); // CMD téglalap kitöltése

Serial.write(0x00); // a téglalap száma

Serial.write(0x01); // A téglalap száma

Serial.write(0x00); // X1H pont

Serial.write(0x0A); // pontX1L

Serial.write(0x00); // Y1H pont

Serial.write(0x50); // pontY1L

Serial.write(0x02); // X2H pont

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

Serial.write(0x01); // Y2H pont

Serial.write(0x90); // pontY2L

Serial.write(0xF0); // Piros színH

Serial.write(0x00); // Piros színL

}

//————————————–A vörösnek vége——————————————–

//—————————————Kezdődik a sárga és az ív——————————————–

if( iNum == 2){ // ív! és sárga!

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

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

Serial.write(0x13);

Serial.write(0x82);

Serial.write(0x10); // Az alapvető grafikai oldal 1. címe

Serial.write(0x00); // Az alapgrafika pabe1 címeL

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

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

Serial.write(0x00); // az ív száma

Serial.write(0x01); // Az ív száma.

Serial.write(0x00); // színH fekete

Serial.write(0x00); // colorL üres

Serial.write(0x01); // az XH kör középpontja

Serial.write(0x2c); // XL kör középpontja

Serial.write(0x00); // YH kör középpontja

Serial.write(0xc8); // YL kör középpontja

Serial.write(0x00); RH

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

Serial.write(0x02); Szög1H

Serial.write(0x76); // Szög1L

Serial.write(0x00); Szög2H

Serial.write(0x5A); // Szög2L

//tölt--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // Az alapvető grafikai oldal 2. címe

Serial.write(0x00); // Az alapgrafika pabe2 címeL

Serial.write(0x00); // CMD téglalap kitöltése

Serial.write(0x04); // CMD téglalap kitöltése

Serial.write(0x00); // a téglalap száma

Serial.write(0x01); // A téglalap száma

Serial.write(0x00); // X1H pont

Serial.write(0x0A); // pontX1L

Serial.write(0x00); // Y1H pont

Serial.write(0x50); // pontY1L

Serial.write(0x02); // X2H pont

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

Serial.write(0x01); // Y2H pont

Serial.write(0x90); // pontY2L

Serial.write(0xFF); // Sárga színH

Serial.write(0x60); // Sárga színL

}

//—————————————A sárga és az ív vége——————————————–

//————————————— Kezdődik a zöld és a téglalap——————————————–

if( iNum == 3){ // téglalap! és zöld!

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x10); // Az alapvető grafikai oldal 1. címe

Serial.write(0x00); // Az alapgrafika pabe1 címeL

Serial.write(0x00); // Téglalap CMD

Serial.write(0x03); // Téglalap CMD

Serial.write(0x00); // a téglalap száma

Serial.write(0x01); // A téglalap száma

Serial.write(0x01); // X1H pont

Serial.write(0x54); // pontX1L

Serial.write(0x00); // Y1H pont

Serial.write(0xED); // pontY1L

Serial.write(0x02); // X2H pont

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

Serial.write(0x01); // Y2H pont

Serial.write(0x54); // pontY2L

Serial.write(0x00); // színH fekete

Serial.write(0x00); // colorL üres

//tölt--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // Az alapvető grafikai oldal 2. címe

Serial.write(0x00); // Az alapgrafika pabe2 címeL

Serial.write(0x00); // CMD téglalap kitöltése

Serial.write(0x04); // CMD téglalap kitöltése

Serial.write(0x00); // a téglalap száma

Serial.write(0x01); // A téglalap száma

Serial.write(0x00); // X1H pont

Serial.write(0x0A); // pontX1L

Serial.write(0x00); // Y1H pont

Serial.write(0x50); // pontY1L

Serial.write(0x02); // X2H pont

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

Serial.write(0x01); // Y2H pont

Serial.write(0x90); // pontY2L

Serial.write(0x2F); // Zöld színH

Serial.write(0x60); // Zöld színL

}

//—————————————A zöld és a téglalap vége——————————————–

//—————————————Kezdődik a narancs és a négyzet——————————————–

if( iNum == 4){ // négyzet! és narancs!

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x10); // Az alapvető grafikai oldal 1. címe

Serial.write(0x00); // Az alapgrafika pabe1 címeL

Serial.write(0x00); // Téglalap CMD

Serial.write(0x03); // Téglalap CMD

Serial.write(0x00); // a téglalap száma

Serial.write(0x01); // A téglalap száma

Serial.write(0x01); // X1H pont

Serial.write(0x54); // pontX1L

Serial.write(0x00); // Y1H pont

Serial.write(0x91); // pontY1L

Serial.write(0x02); // X2H pont

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

Serial.write(0x01); // Y2H pont

Serial.write(0x86); // pontY2L

Serial.write(0x00); // színH fekete

Serial.write(0x00); // colorL üres

//tölt--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // Az alapvető grafikai oldal 2. címe

Serial.write(0x00); // Az alapgrafika pabe2 címeL

Serial.write(0x00); // CMD téglalap kitöltése

Serial.write(0x04); // CMD téglalap kitöltése

Serial.write(0x00); // a téglalap száma

Serial.write(0x01); // A téglalap száma

Serial.write(0x00); // X1H pont

Serial.write(0x0A); // pontX1L

Serial.write(0x00); // Y1H pont

Serial.write(0x50); // pontY1L

Serial.write(0x02); // X2H pont

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

Serial.write(0x01); // Y2H pont

Serial.write(0x90); // pontY2L

Serial.write(0xFD); // narancssárga színH

Serial.write(0x60); // narancssárga színL

}

//—————————————A narancs és a négyzet vége——————————————–

//————————————— Kezdődik a kék és a kör——————————————–

if( iNum == 5){ // kör! és kék!

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

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

Serial.write(0x0F);

Serial.write(0x82);

Serial.write(0x10); // Az alapvető grafikai oldal 1. címe

Serial.write(0x00); // Az alapgrafika pabe1 címeL

Serial.write(0x00); // Karikázd be a CMD-t

Serial.write(0x05); // Karikázd be a CMD-t

Serial.write(0x00); // a kör száma

Serial.write(0x01); // A kör száma

Serial.write(0x01); // az XH kör középpontja

Serial.write(0xD6); // XL kör középpontja

Serial.write(0x00); // YH kör középpontja

Serial.write(0xc8); // YL kör középpontja

Serial.write(0x00); RH

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

Serial.write(0x00); // színH fekete

Serial.write(0x00); // colorL üres

//tölt--

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

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

Serial.write(0x11);

Serial.write(0x82);

Serial.write(0x60); // Az alapvető grafikai oldal 2. címe

Serial.write(0x00); // Az alapgrafika pabe2 címeL

Serial.write(0x00); // CMD téglalap kitöltése

Serial.write(0x04); // CMD téglalap kitöltése

Serial.write(0x00); // a téglalap száma

Serial.write(0x01); // A téglalap száma

Serial.write(0x00); // X1H pont

Serial.write(0x0A); // pontX1L

Serial.write(0x00); // Y1H pont

Serial.write(0x50); // pontY1L

Serial.write(0x02); // X2H pont

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

Serial.write(0x01); // Y2H pont

Serial.write(0x90); // pontY2L

Serial.write(0x00); // kék színH

Serial.write(0xFF); // kék színL

}

//—————————————A kék és a kör vége——————————————–

Végül online hibakeresés.

A STONE TOOLBox (GUI Design szoftver) szerkeszti a képernyőfájl letöltését, az arduino kódfájl feltöltését, csatlakoztatja a tápegységet, a kommunikációt, bekapcsolja a képrajzot és a színváltozást a kívánt hatás elérése érdekében.

A videóban bemutatott kód a következő.

(online tuning próbálkozások)

Forrás: Plato Data Intelligence