Arduino Serial Print en 5 minutos

La función de Arduino Serial print y println, permiten escribir caracteres ascii en el puerto Serial. La función serial es una de las más usadas Arduino. Entonces, el puerto serial es un dispositivo electrónico digital que permite enviar y recibir datos binarios. Esta trancepción utiliza sólo dos lineas de comunicación, llamadas RX y TX. El lenguaje de Arduino incorpora la capacidad de enviar y recibir mensajes por el puerto Serial usando a las funciones print, println, write y read.

La función print requiere de caracteres ascii como parámetros de entrada. Un carácter ascii es una codificación binaria que permite representar caracteres occidentales mediante un arreglo de 8 bits. Para representar a estos caracteres, estos tienen que encontrarse entre doble comillas. Por ejemplo, “Hola Mundo”. Este mensaje requeriría de 10 bytes de información binaria para transferirse por el puerto Serial. Si recordamos que para cada paquete se tiene que agregar 1 bit de inicio y uno de paro.

Serial.print( );

Si te interesa conocer más sobre el protocolo Serial, dale click al enlace: puerto Serial.

 

Entonces, por ejemplo, consideremos la transmisión:

Para esta cadena de caracteres, se requieren 100 bits para transmitir a través de la función print y el pin TX del puerto serial Arduino. Si la velocidad esta configurada a 9600 bits/s le tomara 10.41 ms transmitir esa información a Arduino serial print. El siguiente ejemplo muestra distintas modificaciones de la instrucción print. Cabe mencionar que para proporcionar una mejor lectura a la salida del ejemplo se usa la impresión del carácter “salto de linea”. Este carácter esta representado por \n. Una alternativa es usar, cuando se requiera, la modificación println.

Ejemplos de Arduino Serial print

¿ Qué es mejor, transmitir Byte brutos o caracteres ascii?

Por ejemplo, considere el caso del siguiente programa:

En este programa se presentan las dos opciones de impresión Serial con Arduino. La primera transmisión imprime caracteres y la segunda imprime bytes brutos.  La Figura-1, muestra la imagen resultante del monitor serial para el código de ejemplo 1 para el arduino serial print con las dos opciones. De primera vista, parece que el ejemplo dos esta imprimiendo errores, pero si analizáramos con un monitor serial distinto a Arduino, uno que pueda ver bytes, otra cosa seria.

Resultado codigo monitor serial con el Arduino serial print

Figura-1. Resultado del monitor serial al ejecutar el código-1.

Por ejemplo, analicemos el código. Una variable cuyo valor máximo es 1023 (valor máximo entero del ADC de Arduino), cabe en 16 bits. Entonces si convirtiéramos el valor entero a hexadecimal, 1023 seria: 0x03FF. En cambio, 1023 convertidor a caracteres ascii seria: 0x31303233. En otras palabras, enviar caracteres ascii toma mas ” ancho de banda ” del puerto serial. Esto es, al requerir 1-byte por cada carácter, esta transmisión requiere de 4-bytes mientras que enviar el dato bruto (valor entero), sólo se necesitan 2-bytes. Entonces ¿ qué es mejor ?, enviar bytes brutos o caracteres?, bueno dependerá de la aplicación y el software o modulo que este recibiendo la información binaria.

Por ejemplo, si queremos usar a la instrucción de Arduino serial print, para comunicarnos con el módulo wifi-esp8266ex, este requiere comandos AT, es decir palabras formadas con caracteres ascii. Sin embargo, si queremos graficar en Matlab el canal analógico 0, seria mejor tener mas muestras por segundo de la información que nos interesa y podemos ser mas eficientes al usar a la función write.

Diferencia entre Serial.print, Serial.println y Serial.write

Serial.print imprime caracteres ascii.

Serial.println, funciona igual que la anterior excepto que al termino del ultimo carácter le agrega dos bytes adicionales. Estos son: \r y \n . Retorno de acarreo y salto de linea.

Serial.write, imprime un byte, este byte puede representar tanto un carácter ascii como una variable numérica.

 

El siguiente ejemplo, muestra tres conjuntos de instrucciones equivalentes usando las funciones anteriores.

 

Resumen

La función de Arduino para escribir en el puerto serial es print. Entonces, está función permite enviar por el puerto tanto caracteres como datos binarios brutos. Dependiendo del ancho de banda que se quiera usar, uno u otro puede ser bueno. Por ejemplo si modulo serial con el que se quiera comunicar acepta comandos AT,no hay de otra más que enviar caracteres, si queremos enviar la información a un celular por bluetooth, lo recomendable es enviar bytes brutos.

 

Autor: Dr. Rubén E-Marmolejo.

Profesor de la Universidad de Guadalajara

 

Fuentes:

[1] – https://cdn-learn.adafruit.com/downloads/pdf/adafruit-arduino-lesson-5-the-serial-monitor.pdf 

[2] – https://arduinobot.pbworks.com/f/Manual+Programacion+Arduino.pdf

[3] – https://www.arduino.cc/en/Serial/Print

Escríbenos tus dudas o comentarios

Usamos Cookies en nuestro sitio WEB

Por favor confirma, si aceptas nuestras cookies de rastreo. También puedes negar el uso de cookies de rastreo y seguir navegando sin que ninguna información sea enviada a servicios de terceros.