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(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
Kód:
Serial.print("HELLO");
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:
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ő.
Serial.write(stringData.c_str());
-vel? ha a stringData karakterláncként van meghatározva.