top of page

Introducere in comunicarea seriala Arduino

Ce este comunicarea seriala?

Comunicarea seriala este folosita de placa Arduino pentru a comunica cu computerul,prin intermediul portului USB. Se numeste comunicare "seriala" deoarece transmite cate un bit de informatie pe rand,unul dupa altul:


Comunicarea seriala este implementata in cod cu ajutorul librariei incluse "Serial". Aceasta librarie este echivalentul clasei Stream in C++.

Pentru a vizualiza datele trimise prin portul serial,trebuie sa accesam monitorul serial inclus in IDE (Tools>Serial monitor).Ne va aparea urmatoarea fereastra:


Cea mai mare parte a ecranului este ocupata de monitorul serial propriu-zis,unde vizualizam datele trimise prin port. In partea de sus se afla o bara de dialog,unde putem trimite date catre Arduino. In partea de jos putem seta viteza de comunicare cu placa,derularea automata a textului,stergerea textului si modul de incheiere a paragrafelor (de la inceput sau in continuare).


Functii elementare incluse in biblioteca Serial


-functia Serial.begin() initializeaza comunicarea seriala prin portul USB,la viteza inscrisa intre paranteze (de obicei viteza standard de 9600 baud/biti pe secunda):

Serial.begin(9600);

Nota:Viteza selectata in ecranul monitorului serial trebuie sa fie identica cu valoarea din program,altfel datele primite vor fi trunchiate!

-functia Serial.print() afiseaza pe monitorul serial caracterele scrise intre paranteze,sub forma de coduri ASCII. Aceasta functie este echivalenta cu "cout" din C++:

Serial.print("Buna"); // stringurile sau caracterele se scriu intre ghilimele

Serial.print(65); // numerele pot fi scrise fara ghilimele

Serial.print(65,BIN); // afisare numar sub forma binara

Serial.print(65,HEX) // afisare numar sub forma hexadecimala

Serial.print(65,OCT) // afisare numar sub forma octala

Serial.print(1.23456,0) // rotunjire numar la fara zecimale (1)

Serial.print(1.23456,2) // rotunjire numar la a doua zecimala (1.23)

-functia Serial.println() este identica cu functia Serial.print(),cu exceptia faptului ca afiseaza textul dintre paranteze pe un rand nou:

Serial.println("Buna");

-functia Serial.write() afiseaza pe monitorul serial caracterele scrise intre paranteze,sub forma de biti de informatie:

Serial.write(100) // va afisa caracterul corespunzator codului ASCII (d)

Serial.write("Buna") // stringurile sau caracterele se scriu intr ghilimele

Serial.write("100") // daca un numar este scris intre ghilimele,este interpretat ca un string si va fi afisat ca atare

-functia Serial.available() calculeaza numarul de biti (caractere,numere sau stringuri) valabile pentru citire. Aceasta functie este de obicei folosita pentru a afla daca un caracter a fost trimis prin portul serial catre Arduino si poate fi citit:

void setup() {

Serial.begin(9600); // initializeaza comunicarea seriala la viteza de 9600 baud

}


void loop() {

if (Serial.available() > 0) { // daca sunt disponibile date pentru citire

Serial.println("Date disponibile pentru citire"); /* afiseaza pe monitorul serial textul dintre paranteze */

}

else{ // altfel

Serial.println("Nu sunt disponibile date pentru citire"); /* afiseaza pe monitorul serial textul dintre paranteze */

}

}

-functia Serial.read() determina Arduino sa "citeasca" date venite de la computer prin portul serial. De obicei,este folosita impreuna cu functia Serial.available() pentru a afla daca exista date disponibile pentru citire. Aceasta functie este echivalenta cu "cin" din C++:

int data; // creare variabila "data"


void setup() {

Serial.begin(9600); // initializare comunicare seriala la viteza de 9600 baud

}


void loop() {

if (Serial.available() > 0) { // daca sunt disponibile date pentru citire

data = Serial.read(); // variabiala "data" egala cu citirea portului serial

Serial.print("Am receptionat: "); // afiseaza textul dintre paranteze pe monitorul serial

Serial.println(data, DEC); // afiseaza variabila "data" in forma decimala pe monitorul serial

}

}

-functia Serial.setTimeout() seteaza "cat timp" Arduino va astepta date prin portul serial. Dupa terminarea timpului scris intre paranteze (in milisecunde),conexiunea seriala se va inchide:

Serial.setTimeout(1000); /* daca nu sunt trimise date prin portul serial,conexiunea se va inchide dupa 1 secunda */

De asemenea,aceasta functie poate fi folosita in combinatie cu alte functii pentru a modifica tipul de asteptare implicit.

-functia Serial.find() citeste date din portul serial pana cand o anumita "tinta",specificata intre paranteze (cum ar fi un caracter dintr-un string) este gasita. Daca tinta este gasita,functia va returna valoarea 1 (true). Daca tinta nu este gasita intr-o secunda (timp implicit),functia va returna valoarea 0 (false):

if(Serial.find("Multumesc")){ // daca este gasit stringul "Multumesc"

Serial.print("Cu placere"); // afiseaza pe monitorul serial "Cu placere"

}

else{ // altfel

Serial.print("?????"); // afiseaza pe monitorul serial "?????"

}

Serial.setTimeout(2000); /* putem mari timpul implicit de asteptare al functiei,in acest caz la 2 secunde */

-functia Serial.end() inchide comunicarea seriala:

Serial.end();


Concluzii


Comunicarea seriala este una dintre cele mai folositoare caracteristici ale Arduino,facilitand comunicarea intre microcontroller si PC (sau alte dispozitive). De asemenea poate fi folosita pentru a descoperi defectele dintr-un program,vizualizand datele trimise prin portul serial.


Comunicarea seriala va fi folosita foarte des in numeroase proiecte,pentru a comunica cu diversi senzori sau module. In tutorialele viitoare,vom detalia diferitele aspecte si functiii ascunse ale comunicarii seriale!



15 views0 comments

Comments


bottom of page