Qual è la differenza tra Serial.write e Serial.print? E quando vengono utilizzati?

Qual è la differenza tra Serial.write e Serial.print? E quando vengono utilizzati?
Entrambi sono stati utilizzati per la stampa su monitor seriale, quali sono le loro effettive differenze?

Risposta

Serial.write è più con i piedi per terra, è semplice e veloce, è fatto per parlare in modo binario, un byte alla volta. esempio:

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

Serial.print daltra parte è più versatile, eseguirà la conversione per te da ASCII a binario e può anche convertire in BIN / HEX / OCT / DEC ma è necessario specificare un secondo argomento in questo modo

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" 

altri esempi con output seriale visivo:

Codice:

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

USCITA SERIALE: inserisci qui la descrizione dellimmagine

Codice:

 Serial.print("HELLO"); 

USCITA SERIALE: inserisci qui la descrizione dellimmagine

Serial.println () daltra parte aggiungerà alla fine della riga 2 byte 0x0D e 0x0A come puoi vedere nel frame

Codice:

 Serial.println("HELLO"); 

USCITA SERIALE:

inserisci qui la descrizione dellimmagine

Risposta

Dal sito di Arduino per Serial.write e Serial.print :

Serial.write ()

Scrive dati binari sulla porta seriale. Questi dati vengono inviati come byte o serie di byte; per inviare i caratteri che rappresentano le cifre di un numero utilizza invece la funzione print ().

Seriale .print ()

Stampa i dati sulla porta seriale come testo ASCII leggibile dalluomo.

Risposta

Serial.write invia byte alla porta seriale mentre Serial.print invia caratteri ASCII in modo che le persone possano leggere facilmente.

Alcuni dispositivi funzionano utilizzando i byte per impostare le configurazioni, comunemente usano pacchetti di dati e tu è necessario utilizzare la funzione di scrittura per comunicare con loro. Alla fine invieranno byte tramite linterfaccia seriale e quindi potrai interpretarli andando su ogni byte.

Risposta

Tutti gli esempi sopra sono corretti, ma forse più chiaramente …. Tutti i dati inviati attraverso la porta seriale vengono inviati come 1 “se 0”. (ovvio …. spero) … La differenza tra i due comandi è il modo in cui qualsiasi cosa viene inviata viene effettivamente tradotta / interpretata in / da questi 1 “e 0”. Lesempio più chiaro riguarda la trasmissione di numeri.

Supponiamo che tu debba inviare il numero 217. La rappresentazione binaria (1 “se 0” s) di questo numero è 11011001. Utilizzando il comando Serial.write(217) invierà letteralmente 11011001 attraverso la linea. La rappresentazione esadecimale dello stesso numero è 0xD9 e il comando Serial.write(0xD9) invierà la stessa cosa … 11011001.

Qui è dove diventa interessante … Se usassi il comando Serial.write("217") avresti invece questo: 00110010 00110001 00110111 … COSA?!?!?
Quando una stringa viene passata come argomento, viene scomposta in singoli caratteri, convertita in ASCII e quindi inviata come byte per ogni carattere. Otterresti lo stesso identico output se usassi quanto segue:

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

(00110010 00110001 00110111)

Ora esaminiamo Serial.print(). I comandi Serial.print(217) o Serial.print("217") stamperanno entrambi la stessa cosa: 00110010 00110001 00110111. Questo perché il comando di stampa converte prima qualsiasi numero in un rappresentazione di stringa e quindi utilizza il comando Serial.write() per inviare ogni carattere come singoli bit ASCII.

Anche se questa non è una descrizione COMPLETA, spero che ti aiuti pensare nella giusta direzione …

Risposta

Ancora un altro modo per rispondere a questa domanda è affermare che Serial.write accetta un singolo caratteri in cui Serial.print accetta stringhe. Potrebbero esserci alcune differenze, ma questa è la principale.

Commenti

  • Che dire di Serial.write(stringData.c_str());? se stringData è definito come String.
  • Mostra come stringData è definito come String.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *