1. El Octavo Bit
  2. / Lenguaje de programación de Arduino
  3. / Funciones de comunicación serial

Funciones de comunicación serial

| Actualizado:
Comentarios: 0

Se utilizan para la comunicación entre la placa Arduino y un ordenador u otro dispositivo. Las placas Arduino se comunican por los pines digitales 0 (RX) y 1 (TX), así como con el ordenador mediante la conexión USB. Por lo tanto, si utiliza estas funciones, no puede usar los pines 0 y 1 para entrada o salida digital.

La comunicación serial es fundamental para interconectar el microcontrolador con otros dispositivos, como sensores, actuadores, módulos y ordenadores.

Pines digitales para la comunicación de dispositivos con la placa Arduino UNO
Pines digitales para la comunicación de dispositivos con la placa Arduino UNO

La Comunicación Asíncrona Universal (UART) permite la comunicación en serie asíncrona, lo que significa que no se necesita un reloj compartido entre los dispositivos conectados. En cambio, se utilizan señales de datos (TX - Transmitir y RX - Recibir) para enviar y recibir información. Para utilizar la comunicación serial, puedes usa funciones como:

Serial.begin()

Establece la velocidad de transmisión de datos en bits por segundo (baudios) para la transmisión de datos serie. Para comunicarse con el ordenador, suele utilizarse 9600 baudios. Como abre el canal serie para que pueda comenzar la comunicación, su ejecución se realiza antes de cualquier transmisión, por lo que normamente se escribe dentro de la sección void setup().

Sintaxis

Serial.begin(speed)
Serial.begin(speed, config)

Ejemplo

void setup() {
  Serial.begin (9600); // abre el puerto serie, establece la velocidad de datos a 9600 bps
}
void loop() {}

Serial.end()

Desactiva la comunicación serie, permitiendo a los pines 0 (RX) y 1 (TX) ser utilizados como entradas o salidas digitales. Para volver a habilitar la comunicación en serie, se llama a Serial.begin(). La función Serial.end() no lleva ningún parámetro.

Sintaxis

Serial.end()

Serial.print()

Envía a través del canal serie un dato desde el microcontrolador hacia el exterior. Ese dato puede ser de cualquier tipo: caracter, cadena, número entero, número decimal (por defecto de dos decimales), etc.

Sintaxis

Serial.print(valor)
Serial.print(valor, formato)

Parámetros

  • valor: es el valor a imprimir (cualquier tipo de dato)
  • formato: especifica la base numérica (para tipos de datos int) o el número de decimales (para tipos float)

Ejemplos

void setup() {
  Serial.begin(9600);
}
void loop() {
  // print labels
  Serial.print("NO FORMAT");  // imprime una etiqueta
  Serial.print("\t");         // salto de línea

  Serial.print("DEC");
  Serial.print("\t");

  Serial.print("HEX");
  Serial.print("\t");

  Serial.print("OCT");
  Serial.print("\t");

  Serial.print("BIN");
  Serial.println();        // salto de línea tras la ultima etiqueta

  for (int x = 0; x < 64; x++) { 
    // Diferentes formatos de impresión:
    Serial.print(x);       // ASCII-encoded decimal - igual que "DEC"
    Serial.print("\t\t");  // imprime 2 tabulaciones

    Serial.print(x, DEC);  // ASCII-encoded decimal
    Serial.print("\t");    // imprime 1 tabulación

    Serial.print(x, HEX);  // ASCII-encoded hexadecimal
    Serial.print("\t");    // imprime 1 tabulación

    Serial.print(x, OCT);  // ASCII-encoded octal
    Serial.print("\t");    // imprime 1 tabulación

    Serial.println(x, BIN);  // ASCII-encoded binary
    // añade un salto de línea con "println"
    delay(200);            // espera 200 milliseconds
  }
  Serial.println();        // añade otro salto de línea
}

Serial.println()

Realiza la misma función que Serial.print(), pero además, añade automáticamente al final de los datos enviados dos caracteres extra: retorno de carro (código ASCII nº 13) y nueva línea (código ASCII nº 10).

Sintaxis

Serial.println(valor)
Serial.println(val, format)

Parámetros

  • valor: es el valor a imprimir (cualquier tipo de dato)
  • formato: especifica la base numérica (para tipos de datos int) o el número de decimales (para tipos float)

Serial.parseInt()

Lee del buffer de entrada todos los datos hasta que se encuentre con un número entero (eliminándolos segun los lee). El valor de retorno será entonces ese número entero. Cuando detecte el primer caracter posterior no válido, dejará de leer (y por tanto, no seguirá eliminando datos).

Sintaxis

Serial.parseInt()

Ejemplo

void loop(){
  int x;
  if (Serial.available() > 0){
     x = Serial.parseInt();
     Serial.println(x) ;
  }
}

Este código simplemente recibe en x los datos que nos tecleen en la consola, cuando pulsemos intro, y si estos son enteros los almacena en x y si es un texto, lo interpreta como cero.

Serial.read()

Se utiliza para leer un byte de datos recibidos a través de la comunicación serial. Esta función es comúnmente utilizada cuando se emplea la comunicación UART (Universal Asynchronous Receiver/Transmitter) para recibir datos desde un dispositivo externo, como un ordenador, otro microcontrolador o un sensor.

Sintaxis

Serial.read()

Ejemplo

void setup() {
  Serial.begin(9600); // Iniciar comunicación serial a 9600 baudios
}

void loop() {
  if (Serial.available() > 0) {
    char datoRecibido = Serial.read(); // Lee un byte de datos
    // Realiza acciones basadas con el dato recibido
    //si el número esta entre '1' y '9'
    if (datoRecibido >= '1' && datoRecibido <= '9'){
      Serial.print("Recibido: ");
      Serial.println(datoRecibido);
    }
  }
}

En el ejemplo recibe un dato y si un numero comprendido entre 1 y 9, lo muestra por el monitor serial. 

Comentarios - 0

Deja un comentario

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