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
Cod:
Serial.print("HELLO");
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Ă:
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.
Serial.write(stringData.c_str());
? dacă stringData este definit ca String.