Mi a különbség a Serial.write és a Serial.print között? És mikor használják őket?

Mi a különbség a Serial.write és a Serial.print között? És mikor használják őket?
Mindkettőt használták nyomtatásra soros monitoron, mi a tényleges különbség?

Válasz

Serial.write lényegre törőbb, egyszerű és gyors, binárisan beszél, egy-egy bájt mellett. példa:

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

A Serial.print viszont sokoldalúbb, megteszi az átalakítást az ASCII-binárisról binárisra, és átalakíthatja BIN-be / HEX / TOT / DEC, de meg kell adnia egy második argumentumot, így a következőt:

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" 

további példák vizuális soros kimenettel:

Kód:

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

SOROS KIMENET: írja ide a kép leírását

Kód:

 Serial.print("HELLO"); 

SOROS KIMENET: ide írja be a kép leírását

A Serial.println () másrészt hozzáadja a 2. sor 0x0D és 0x0A bájtjait, ahogy a keretben láthatja

Kód:

 Serial.println("HELLO"); 

SOROS KIMENET:

írja ide a kép leírását

Válasz

Az Arduino webhelyéről a Serial.write és Serial.print :

Serial.write ()

Bináris adatokat ír a soros portra. Ezeket az adatokat bájtként vagy bájtsorozatként küldjük; egy szám számjegyét képviselő karakterek elküldéséhez használja a print () függvényt.

Soros .print ()

Adatokat nyomtat a soros portra ember által olvasható ASCII szövegként.

Válasz

Serial.write küld bájt a soros portra, míg a Serial.print ASCII karaktereket küld, hogy az emberek könnyen olvashassanak.

Egyes eszközök bájtok segítségével működnek a konfigurációk beállításához, gyakran használnak adatcsomagokat, és Ön az írás funkciót kell használniuk a velük való kommunikációhoz. Végül bájtokat küldenek a soros interfészen keresztül, és akkor az egyes bájtokat értelmezheti.

Válasz

Az összes fenti példa helyesek, de talán még egyértelműbben …. A soros porton keresztül küldött összes adat 1 “s” és 0 “s formátumban kerül elküldésre. (nyilvánvaló … remélem) … A két parancs különbsége abban rejlik, hogy a küldötteket hogyan fordítják le / értelmezik ezekre az 1 “és 0” sokra. A legegyértelműbb példa a számok továbbítása.

Tegyük fel, hogy el kell küldenie a 217. számot. Ennek a számnak a bináris (1 “és 0” s) ábrázolása 11011001. A Serial.write(217) szó szerint csak a 11011001 számot fogja elküldeni a vonalon. Az azonos szám Hex-ábrázolása 0xD9, a Serial.write(0xD9) parancs pedig ugyanazt küldi … 11011001.

Itt érdekes lesz … Ha a Serial.write("217") parancsot használná, ehelyett ezt kapná: 00110010 00110001 00110111 … MI?????
Ha egy karakterláncot argumentumként adunk át, akkor azt külön karakterekre bontják, konvertálják ASCII formátumba, majd mindegyik karakter számára bájtként küldik. Pontosan ugyanazt a kimenetet kapná, ha a következőket használná:

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

(00110010 00110001 00110111)

Most nézzük meg Serial.print(). A Serial.print(217) vagy a Serial.print("217") parancsok ugyanazt a dolgot fogják kinyomtatni: 00110010 00110001 00110111. Ez azért van, mert a print parancs először bármely számot konvertál karakterlánc reprezentáció, majd a Serial.write() paranccsal küldi el az egyes karaktereket külön ASCII bitként.

Bár ez nem TELJES leírás, remélem, hogy segít abban, hogy eljusson jó irányban gondolkodni …

Válasz

Erre a válasz egy másik módja, ha kijelentjük, hogy a Serial.write elfogadja az egyedülállóakat karakterek, ahol a Serial.print elfogadja a karakterláncokat. Lehet, hogy vannak különbségek, de ez a fő.

Megjegyzések

  • Mi a helyzet a Serial.write(stringData.c_str()); -vel? ha a stringData karakterláncként van meghatározva.
  • Kérjük, mutassa be, hogy a stringData hogyan definiálva karakterláncként.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük