Quelle est la différence entre Serial.write et Serial.print? Et quand sont-ils utilisés?

Quelle est la différence entre Serial.write et Serial.print? Et quand sont-ils utilisés?
Les deux ont été utilisés pour imprimer sur un moniteur série, quelles sont leurs différences réelles?

Réponse

Serial.write est plus terre à terre, il est simple et rapide, il est fait pour parler binaire, un octet à la fois. exemple:

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

Serial.print en revanche est plus polyvalent, il effectuera la conversion pour vous dASCII en binaire, il peut également convertir en BIN / HEX / OCT / DEC mais vous devez spécifier un deuxième argument comme celui-ci

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" 

plus dexemples avec une sortie série visuelle:

Code:

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

SORTIE SÉRIE: entrez la description de limage ici

Code:

 Serial.print("HELLO"); 

SORTIE SÉRIE: entrez la description de limage ici

Serial.println () dans lautre main ajoutera la fin de la ligne 2 octets 0x0D et 0x0A comme vous pouvez le voir dans le cadre

Code:

 Serial.println("HELLO"); 

SORTIE SÉRIE:

entrez la description de limage ici

Réponse

Depuis le site Arduino pour Serial.write et Serial.print :

Serial.write ()

Ecrit des données binaires sur le port série. Ces données sont envoyées sous forme doctet ou de série doctets; pour envoyer les caractères représentant les chiffres dun nombre, utilisez plutôt la fonction print ().

Série .print ()

Imprime les données sur le port série sous forme de texte ASCII lisible par lhomme.

Réponse

Serial.write envoie octets au port série tandis que Serial.print envoie des caractères ASCII pour que les gens puissent lire facilement.

Certains appareils fonctionnent en utilisant des octets pour définir les configurations, utilisent généralement des paquets de données et vous besoin dutiliser la fonction décriture pour communiquer avec eux. Finalement, ils enverront des octets via linterface série et vous pourrez ensuite interpréter en allant chaque octet.

Réponse

Tous les exemples ci-dessus sont correctes, mais peut-être plus clairement …. Toutes les données envoyées via le port série sont envoyées en 1 « s et 0 » s. (évident … Jespère) … La différence entre les deux commandes est la façon dont tout ce qui est envoyé est réellement traduit / interprété vers / à partir de ces 1 « s et 0 ». Lexemple le plus clair concerne la transmission de nombres.

Disons que vous devez envoyer le nombre 217. La représentation binaire (1 « s et 0 ») de ce nombre est 11011001. En utilisant la commande Serial.write(217) enverra littéralement 11011001 à travers la ligne. La représentation hexadécimale du même nombre est 0xD9, et la commande Serial.write(0xD9) enverra la même chose … 11011001.

Voici où cela devient intéressant … Si vous deviez utiliser la commande Serial.write("217"), vous obtiendriez plutôt ceci: 00110010 00110001 00110111 … QUOI?!?!?
Lorsquune chaîne est transmise comme argument, elle est décomposée en caractères individuels, convertie en ASCII, puis envoyée sous forme doctet pour chaque caractère. Vous obtiendrez exactement la même sortie si vous utilisiez ce qui suit:

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

(00110010 00110001 00110111)

Regardons maintenant Serial.print(). Les commandes Serial.print(217) ou Serial.print("217") afficheront toutes les deux la même chose: 00110010 00110001 00110111. En effet, la commande dimpression convertit dabord tout nombre en un représentation sous forme de chaîne et utilise ensuite la commande Serial.write() pour envoyer chaque caractère sous forme de bits ASCII individuels.

Bien que ce ne soit pas une description COMPLÈTE, jespère que cela vous aidera penser dans la bonne direction …

Réponse

Encore une autre façon de répondre à cette question est de déclarer que Serial.write accepte le single caractères où Serial.print accepte les chaînes. Il peut y avoir des différences, mais cest la principale.

Commentaires

  • Et Serial.write(stringData.c_str());? si stringData est défini comme String.
  • Veuillez montrer comment stringData est défini comme String.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *