Datos puerto Serial

Es muy importante poder comunicar, enviar y recibir datos desde nuestro arduino a diferentes periféricos o simplemente poder visualizar alguna variable o lectura de algún sensor en el monitor serial monitor serial de nuestro IDE. existen varias protocolos de comunicación pero en este tutorial nos enfocaremos en la comunicación serial. Arduino nos permite poder realizar una comunicación serial muy fácil conectando nuestra arduino al computador por el puerto usb para poder visualizarlo en el monitor serial o algún programa  o utilizando los pines digitales 0(rx) y 1(tx) para establecer la comunicación con algún otro dispositivo por ejemplo otra arduino o un modulo bluetooh, etc. pero también podemos utilizar ambos al mismo tiempo por ejemplo recibir datos de un modulo bluetooh y visualizarlos en el monitor serial pero para poder realizar esto se debe utilizar la librería softwareSerial, la cual nos permite seleccionar unos pines digital aparte del 0 y el 1, ya que la comunicación con el monitor serial ocupa estos pines, entonces siendo este el caso recibiríamos datos del modulo bluetooh por los pines asignados de la librería softwareSerial y enviaríamos datos al monitor serial por los pines 0 y 1 que son por defecto estos para el monitor serial, en el próximo tutorial tocaremos sera sobre sofwareSerial.

Las tarjetas arduino tienen como mínimo un puerto serial, la arduino mega tiene 3 puertos seriales, es importante tener en cuenta esto en con nuestra arduino y que nivel de voltaje manejan para no dañarla, en la Arduino UNO son los pines digitales 0(rx) y 1 (rx), estos pines no se pueden usar si tenemos activado el puerto serial ya que son los que se ocupan para transmisión y recepción de datos.

Lo primero que debemos saber es como establecer esta comunicación, programar nuestra arduino para que habilite el puerto serial, anteriormente se debía llamar la librería Serial pero ya no es el caso, entonces para iniciar nuestra comunicación serial debemos conectar nuestra arduino al computador con el cable usb y programar.

la comunicación serial tiene ciertas funciones explicaremos las mas importantes y mas usadas desde mi punto de vista

  • if(Serial), esta condición no retornara un valor booleano,”true” si el puerto serial esta disponible y “false” si no lo esta, esto nos permite ejecutar algunas sentencias dependiendo de nuestras necesidades dependiendo de la disponibilidad del puerto serial. También podemos usarlo con el while, while(Serial). tener en cuenta como es declarado el puerto segun la tarjeta arduino por ejemplo la MEGA, para el puerto serial 1 if(Serial1), puerto serial 2 if(Serial2), puerto serial 2 if(Serial3).

  • Serial.available(), esta función nos retorna le numero de bits recibidos en el buffer listos para ser leídos.

  • Serial.availableForWrite(), Serial.available(), esta función retorna el numero de bytes o caracteres disponibles para ser enviados al buffer sin bloquear la función de write().
  • Serial.end(), Serial.end();  esta función finaliza la comunicación serial, al finalizarla los pines digitale 0 y 1 (en la arduino UNO), estan disponibles para se usados como pines de entrada y salida. para reanudar la conexión se debe usar la función Serial.begin().
  • Serial.find(), Serial.find( caracter); esta función nos retorna un booleano, “true” si el carácter esta en la cadena (string) de datos, y “false” si el tiempo de búsqueda se acaba sin encontrar el caracter.
  • Serial.findUntil(carácter,terminal); nos retorna un booleano “true” si el carácter es hallado hasta el carácter terminal, sino encuentra nada retorna “false”.
  • Serial.flush(); esta función espera hasta que la transmisión de datos sea completada.
  • Serial.parseFloat(); esta función retorna el primer valor flotante de la cadena de caracteres recibida, si encuentra valores de caracteres estos son saltados, hasta encontrar el primer valor flotante de la cadena.
  • Serial.parseInt(), retorna el primer valor valido entero de la cadena de caracteres recibidas, salta aquellos caracteres que no son numéricos, Serial.parseInt(skipchar), cuando le agregamos un parámetro a la función como skipchar le indicamos a la función que lo salte pero que siga con la búsqueda. Por ejemplo si en la cadena se recibe un 1.000 (mil) si no le colocamos como parámetro el “.”, el nos retornar 1 y no 1000. si no hay dígitos enteros la función retorna 0, la busqueda se detiene sino encuentra un dígito o el tiempo de espera por defecto es superado sin resultado.
  • Serial.peek(), retorna el primer byte (carácter) de la cadena sin removerlos dejando la cadena de datos como se recibió originalmente, si no hay datos disponible retorna -1.

Serial.print(), permite imprimir datos en el puerto serial legible (ASCII), podemos imprimir varios valores, un carácter se muestra normal con Serial.print(A) veras A, los enteros igual con Serial.print(20) veras 20, en los decimales (flotantes) por defecto solo mostrara 2 numero decimales. si deseas imprimir un formato especifico debes agrear otro parámetro a la función. como veremos a continuación.

  • Serial.println(), esta función imprime de igual manera y utiliza los mismos parámetros que Serial.print(), visto anteriormente, la única diferencia es que seguido del texto esta va un retorno de carro (\r) y un salto de linea (\n).
  • Serial.read(), lee los datos entrantes al puerto serial.
  • Serial.readBytes(), lee los caracteres en el puerto serial, esta finaliza cuando a leído todos los caracteres de la cadena o si el tiempo si acaba, devuelve el numero de caracteres en el buffer, 0 significa que no hay datos validos.
  • Serial.readBytesUntil(), lee los caracteres en el buffer en serie en un array, la función finaliza si detecta el carácter de finalización, si se ha leído la longitud especificada o el tiempo por defecto de lectura se agota, esta función retorna hasta el ultimo caracter antes del carácter de finalización, esto significa que el carácter de finalización no lo retorna. la función tiene 3 parámetros Serial.readBytesUntil(character, buffer,lenght), donde character es el carácter a buscar, el buffer si es chart[] o byte[] y lenght es el numero de bytes para leer.
  • Serial.readString(), lee los caracteres en el buffer como un string, la función finaliza si el tiempo se agota. esta función retorna el string que se recibe.
  • Serial.readStringUntil(), lee los caracteres en el buffer como un string, la función finaliza si el tiempo se agota o hasta es detectado el carácter de finalización. esta función retorna el string que se recibe hasta el carácter de finalización, esta función tiene un parámetro que es el carácter de finalización, Serial.readStringUntil(character).
  • Serial.setTimeout(), esta función establece el tiempo máximo en milisegundos que espera por el dato en el puerto serial, por defecto son 1000ms, este sirve para los Serial.readBytes() y  Serial.readBytesUntil(), solo tiene un parámetro que es el tiempo en milisengundos y es un tipo long, Serial.setTimeout(time).
  • Serial.write(), esta función envia datos como bytes o serie de bytes. su sintaxis puede tener hasta 2 parametros, Serial.write(val), donde val es un valor como string, Serial.write(str), este parámetro es un string y se envía como una serie de bytes y Serial.write( buf, len), donde buf es un array y len el tamaño del array que se envía.
  • Serial.serialEvent(), esta es llamada cuando  hay datos disponibles en el buffer, para capturar datos se usa Serial.read(). la sintaxis es la siguiente.

    Bueno esto es todo recuerden que el próximo tutorial es sobre el softwareSerial.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *