¿Cuál es la diferencia entre Serial.write y Serial.print? ¿Y cuándo se usan?
26
¿Cuál es la diferencia entre Serial.write y Serial.print? ¿Y cuándo se usan?
Ambos se han utilizado para imprimir en un monitor serie, ¿cuáles son sus diferencias reales?
Escribe datos binarios en el puerto serie. Estos datos se envían como un byte o serie de bytes; para enviar los caracteres que representan los dígitos de un número, utilice la función print () en su lugar.
Serial.print ()
Imprime datos en el puerto serie como texto ASCII legible para humanos.
Serial.write es más realista, es simple y rápido, está hecho para hablar binario, un byte a la vez. ejemplo:
Serial.write(0x45); // will write 0100 0101 to the cable
Serial.print, por otro lado, es más versátil, hará la conversión por usted de ASCII a binario, también puede convertir a BIN / HEX / OCT / DEC, pero debe especificar un segundo argumento así
Serial.writeenvía bytes al puerto serie mientras Serial.printenvía caracteres ASCII para que las personas puedan leer fácilmente.
Algunos dispositivos funcionan usando bytes para establecer configuraciones, comúnmente usan paquetes de datos y usted necesita usar la función de escritura para comunicarse con ellos. Eventualmente enviarán bytes a través de la interfaz en serie y luego puede interpretar yendo a cada byte.
Todos los ejemplos anteriores son correctos, pero tal vez más claramente ... Todos los datos enviados a través del puerto serie se envían como 1 y 0. (obvio ... espero) ... La diferencia en los dos comandos es cómo lo que se envía se traduce / interpreta realmente a / desde estos 1's y 0's. El ejemplo más claro implica la transmisión de números.
Digamos que necesita enviar el número 217. La representación binaria (1 y 0) de este número es 11011001. El uso del comando Serial.write(217)enviará literalmente 11011001 a través de la línea. La representación hexadecimal del mismo número es 0xD9, y el comando Serial.write(0xD9)enviará lo mismo ... 11011001.
Aquí es donde se pone interesante ... Si usara el comando, en Serial.write("217")su lugar obtendría esto: 00110010 00110001 00110111 ... ¿QUÉ?!?!?
Cuando se pasa una cadena como argumento, se divide en caracteres individuales, se convierte a ASCII y luego se envía como un byte para cada carácter. Obtendría exactamente la misma salida si usara lo siguiente:
Ahora echemos un vistazo Serial.print(). Los comandos Serial.print(217)o Serial.print("217")ambos imprimirán lo mismo: 00110010 00110001 00110111. Esto se debe a que el comando de impresión primero convierte cualquier número en una representación de cadena y luego usa el comandoSerial.write() para enviar cada carácter como bits ASCII individuales.
Aunque esta no es una descripción COMPLETA, espero que te ayude a pensar en la dirección correcta ...
Otra forma de responder esto es declarar que Serial.write acepta caracteres individuales donde Serial.print acepta cadenas. Puede haber algunas diferencias, pero esta es la principal.
Respuestas:
Desde el sitio de Arduino para Serial.write y Serial.print :
Serial.write ()
Serial.print ()
fuente
Serial.write es más realista, es simple y rápido, está hecho para hablar binario, un byte a la vez. ejemplo:
Serial.print, por otro lado, es más versátil, hará la conversión por usted de ASCII a binario, también puede convertir a BIN / HEX / OCT / DEC, pero debe especificar un segundo argumento así
Más ejemplos con salida serial visual:
Código:
SALIDA EN SERIE:
Código:
SALIDA EN SERIE:
Serial.println () en el otro lado agregará el final de la línea 2 bytes 0x0D y 0x0A como puede ver en el marco
Código:
SALIDA EN SERIE:
fuente
Serial.write
envía bytes al puerto serie mientrasSerial.print
envía caracteres ASCII para que las personas puedan leer fácilmente.Algunos dispositivos funcionan usando bytes para establecer configuraciones, comúnmente usan paquetes de datos y usted necesita usar la función de escritura para comunicarse con ellos. Eventualmente enviarán bytes a través de la interfaz en serie y luego puede interpretar yendo a cada byte.
fuente
Todos los ejemplos anteriores son correctos, pero tal vez más claramente ... Todos los datos enviados a través del puerto serie se envían como 1 y 0. (obvio ... espero) ... La diferencia en los dos comandos es cómo lo que se envía se traduce / interpreta realmente a / desde estos 1's y 0's. El ejemplo más claro implica la transmisión de números.
Digamos que necesita enviar el número 217. La representación binaria (1 y 0) de este número es 11011001. El uso del comando
Serial.write(217)
enviará literalmente 11011001 a través de la línea. La representación hexadecimal del mismo número es 0xD9, y el comandoSerial.write(0xD9)
enviará lo mismo ... 11011001.Aquí es donde se pone interesante ... Si usara el comando, en
Serial.write("217")
su lugar obtendría esto: 00110010 00110001 00110111 ... ¿QUÉ?!?!?Cuando se pasa una cadena como argumento, se divide en caracteres individuales, se convierte a ASCII y luego se envía como un byte para cada carácter. Obtendría exactamente la misma salida si usara lo siguiente:
(00110010 00110001 00110111)
Ahora echemos un vistazo
Serial.print()
. Los comandosSerial.print(217)
oSerial.print("217")
ambos imprimirán lo mismo: 00110010 00110001 00110111. Esto se debe a que el comando de impresión primero convierte cualquier número en una representación de cadena y luego usa el comandoSerial.write()
para enviar cada carácter como bits ASCII individuales.Aunque esta no es una descripción COMPLETA, espero que te ayude a pensar en la dirección correcta ...
fuente
Otra forma de responder esto es declarar que Serial.write acepta caracteres individuales donde Serial.print acepta cadenas. Puede haber algunas diferencias, pero esta es la principal.
fuente