Care este diferența dintre Serial.write și Serial.print? Și când sunt folosite?

Care este diferența dintre Serial.write și Serial.print? Și când sunt utilizate?
Ambele au fost folosite pentru a imprima pe monitorul serial, care sunt diferențele lor reale?

Răspuns

Serial.write este mai practic, este simplu și rapid, este făcut să vorbească binar, câte un octet. exemplu:

Serial.write(0x45); // will write 0100 0101 to the cable 

Serial.print, pe de altă parte, este mai versatil, va face conversia pentru tine de la ASCII la binar și se poate converti în BIN / HEX / OCT / DEC, dar trebuie să specificați un al doilea argument ca așa

Serial.print(76, BIN) gives "0100 1100" Serial.print(76, OCT) gives "114" Serial.print("L", DEC) gives "76" Serial.print(76, HEX) gives "4C" 

mai multe exemple cu ieșire serială vizuală:

Cod:

 Serial.write(0x48); // H Serial.write(0x45); // E Serial.write(0x4C); // L Serial.write(0x4C); // L Serial.write(0x4F); // O 

IEȘIRE SERIALĂ: introduceți descrierea imaginii aici

Cod:

 Serial.print("HELLO"); 

IEȘIRE SERIALĂ: introduceți descrierea imaginii aici

Serial.println () în cealaltă parte va adăuga sfârșitul liniei 2 octeți 0x0D și 0x0A așa cum puteți vedea în cadru

Cod:

 Serial.println("HELLO"); 

IEȘIRE SERIALĂ:

introduceți descrierea imaginii aici

Răspuns

De pe site-ul Arduino pentru Serial.write și Serial.print :

Serial.write ()

Scrie date binare în portul serial. Aceste date sunt trimise ca un octet sau o serie de octeți; pentru a trimite caracterele care reprezintă cifrele unui număr, folosiți în schimb funcția print ().

Serial .print ()

Tipărește date în portul serial ca text ASCII care poate fi citit de om.

Răspuns

Serial.write octeți la portul serial în timp ce Serial.print trimite caractere ASCII, astfel încât oamenii să poată citi cu ușurință.

Unele dispozitive funcționează folosind octeți pentru a seta configurații, de obicei folosesc pachete de date și trebuie să utilizeze funcția de scriere pentru a comunica cu ei. În cele din urmă, vor trimite octeți prin interfața serială și apoi puteți interpreta trecând fiecare octet.

Răspuns

Toate exemplele de mai sus sunt corecte, dar poate mai clar …. Toate datele trimise prin portul serial sunt trimise ca 1 „s și 0” s. (evident …. sper) … Diferența dintre cele două comenzi este modul în care orice este trimis este de fapt tradus / interpretat în / din aceste 1 „s și 0” s. Cel mai clar exemplu implică transmiterea numerelor.

Să spunem că trebuie să trimiteți numărul 217. Reprezentarea binară (1 „s și 0” s) a acestui număr este 11011001. Utilizând comanda Serial.write(217) va trimite literalmente 11011001 peste linie. Reprezentarea hexagonală a aceluiași număr este 0xD9, iar comanda Serial.write(0xD9) va trimite același lucru … 11011001.

Aici devine interesant … Dacă ar fi să folosiți comanda Serial.write("217"), în schimb, veți obține acest lucru: 00110010 00110001 00110111 … CE?!?!?
Când un șir este transmis ca argument, acesta este împărțit în caractere individuale, convertit în ASCII și apoi trimis ca octet pentru fiecare caracter. Ați obține exact aceeași ieșire dacă ar fi să utilizați următoarele:

Serial.write(50); Serial.write(51); Serial.write(55); 

(00110010 00110001 00110111)

Acum să vedem Serial.print(). Comenzile Serial.print(217) sau Serial.print("217") vor imprima ambele același lucru: 00110010 00110001 00110111. Acest lucru se datorează faptului că comanda print mai întâi convertește orice număr într reprezentarea șirului și apoi folosește comanda Serial.write() pentru a trimite fiecare caracter ca biți ASCII individuali.

Deși aceasta nu este o descriere COMPLETĂ, sper că vă va ajuta să vă gândind în direcția corectă …

Răspuns

Un alt mod de a răspunde la acest lucru este să afirmați că Serial.write acceptă un singur caractere în care Serial.print acceptă șiruri. Pot exista unele diferențe, dar acesta este principalul.

Comentarii

  • Ce zici de Serial.write(stringData.c_str());? dacă stringData este definit ca String.
  • Vă rugăm să arătați modul în care stringData este definit ca String.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *