Se afișează postările cu eticheta SoftwareSerial. Afișați toate postările
Se afișează postările cu eticheta SoftwareSerial. Afișați toate postările

vineri, 11 decembrie 2020

Mesaje complexe intre placi Arduino pe comunicatie seriala (4)

   Avand o solicitare pentru rezolvarea transmiterii a 10 valori numerice intre 2 placi Arduino, tot pe serial, am zis sa incerc si asta. Cele 10 valori sunt 7 temperaturi pozitive ca numere intregi (pot trimite valori 0..255) si 3 pozitii de comutatoare (0 - deschis, 1 - inchis). Schema de test este aceeasi, ca cea din articolul precedent:
   Programul placii Arduino ce trimite datele este tx_10variables.ino, iar programul placii receptoare este rx_10variables.ino. In ecranele de monitorizare seriala se pot obersva valorile:
   Am realizat filmuletul Mesaje complexe intre placi Arduino pe comunicatie seriala (4):
    Ulterior, s-a cerut si primirea unui raspuns din partea placii receptoare, asa ca am modificat programele, astfel ca transmitatorul foloseste programul tx_10variables_rx_1variable.ino, iar receptorul programul rx_10variables_tx_1variable.ino.

sâmbătă, 1 iunie 2019

Mesaje complexe intre placi Arduino pe comunicatie seriala (2)

    Pentru a vedea utilitatea celor prezentate in articolul anterior am modificat programele sa transmit intr-un singur mesaj 3 valori alese aleator: o temperatura de genul -23.50C sau +23.50C, starea unui senzor (0 sau 1) si un procent (0 la 100).
   Schema de conectare este aceeasi
   Deoarece nu pot transmite decat valori intregi, ma voi folosi de un artificiu, voi trimite prima valoare un numar de 10 ori mai mare ca temperatura, a doua valoare va fi de un numar format din semnul temperaturii (1 pentru minus si zero pentru plus) inmultit cu 10 si starea vibratiei (0 sau 1) si procentul.
   De exemplu, daca am temperatura de +2,40C, starea senzorului activata (1) si procentul de 17%, voi transmite asa:
- primul numar va fi 24
- al doilea numar va fi 1, deoarece semnul temperaturii e plus si starea senzorului 1, deci 10*0+1=1
- al treilea numar 17.
   Daca al doilea Arduino primeste: 119,11,39, vom obtine:
- temperatura este -11,90C deoarece al doilea numar este 11 = 1*10 + 1, deci semn negativ, iar primul numar e 119 = 11,9*10;
- starea senzorului e activa 1, fiind cifra unitatilor de la al doilea numar
- procentul de umplere bazin e 39%, fiind chiar la treilea numar.
    Testul l-am realizat, ca si data trecuta, cu trimiterea datelor de o placa Arduino Uno, care are un shield pe care este fixata o placa Arduino Nano:
   Programul pentru codare si transmitere este tx_2.ino, iar pentru receptie si decodare rx_2.ino !
   Am facut si 2 filmulete:

joi, 30 mai 2019

Mesaje complexe intre placi Arduino pe comunicatie seriala

     Avand nevoie sa transmit mai multe variabile (numere intregi si cu virgula) pe comunicatia seriala dintre 2 placi de dezvoltare Arduino, m-am lovit de decodarea corecta a mesajelor transmise, de exemplu vreau sa trimit o temperatura de genul +23,40C sau -23,40C, o stare (0 sau 1) si un numar (procent de la 0 la 100)... lungimea unui sir ar fi fost variabila, daca nu luam masuri de corectie (sa transmit, de exemplu 023 in loc de 23)... dupa mai teste impreuna cu 2 prieteni, utilizatori de Arduino (Alex si Mihai, pentru proiecte total diferite) am utilizat informatiile din articolul Chapter 4. Serial Communications (partea de trimitere din subcapitolul 4.4, iar partea de decodare din subcapitolul 4.5).
     Am folosit comunicarea seriala prin utilizarea librariei SoftwareSerial (am folosit pinii 2 si 3). Partea de trimitere a fost incarcata pe o placa Arduino Uno si partea de receptor si decodificare pe Arduino Nano, in special pentru a nu scrie programele gresit...
   Schema de conectare, pentru aceste teste, este foarte simpla:
    Pentru trimitere am folosit intial programul tx_1.ino pentru a transmite un mesaj cu 3 numere: 10, 100, 1000, apoi am trimis valori alese aleator folosind programul tx_1a.ino. Pentru receptor am adaptat programul rx_1.ino.
    Am facut s 2 filmulete, pentru a intelege mai usor cu am scris mai sus:
- Mesaje complexe intre placi Arduino pe comunicatie seriala
- Multiple Text Fields in Single Message using Arduino
   De mentionat ca se trimit doar numere intregi, pentru a trimite numere cu virgula sau cu semn, se inmultesc numerele cu 10 sau 100, respectiv se mai foloseste un numar pentru semnul minus sau plus, etc, dar astea le voi prezenta intr-un alt articol.