Comunicación Serie

Comunicación Serie

La comunicación serie es aquella en la que se envía un bit de datos a la vez, de forma secuencial sobre el canal. La ventaja principal es que se necesitan muy pocas líneas para transmitir, al contrario que en la comunicación paralelo donde se requieren tantas líneas como bits se quieran enviar simultáneamente. Sin embargo, como desventaja diremos que la comunicación serie es más lenta que la paralelo en igualdad de condiciones (misma frecuencia). Por supuesto, para que la transmisión se realice correctamente, emisor y receptor, deben estar sincronizados, y por tanto deben trabajar a la misma frecuencia.

Comunicación Serie Arduino – Ordenador utilizando el IDE de Arduino

En este caso vamos a ver un ejemplo de como usar la comunicación serie para transmitir entre el ordenador y la placa de Arduino Uno. Para ello usaremos el IDE de esta placa. Aquí os dejamos el código que hemos usado:

int color = 0;
void setup() {
  //Set the baudrate of the transmission
  Serial.begin(115200);
 }
void loop() {
  if(color != 10){
    Serial.println("Seleccione un color: ");
    Serial.println("1: Amarillo");
    Serial.println("2: Rojo");
    Serial.println("3: Verde");
    Serial.println("4: Azul");
    Serial.println("5: Negro");
  }
  while(Serial.available() < 2){
    delay(10);  
  }

  if(Serial.available() > 1){
      color = Serial.read();
      switch (color)
      {
        case 49: //Caracter ASCII del 1
          Serial.println("Has elegido el amarillo");
          break;
        case 50: //Caracter ASCII del 2
          Serial.println("Has elegido el rojo");
          break;
        case 51: //Caracter ASCII del 3
          Serial.println("Has elegido el verde");
          break;
        case 52: //Caracter ASCII del 4
          Serial.println("Has elegido el azul");
          break;
        case 53: //Caracter ASCII del 5
          Serial.println("Has elegido el negro");
          break;
        case 10:
          //caracter nueva linea
          break;
        default:
          Serial.println("No has elegido un color de la lista. Vuelve a intentarlo.");
          break;
      }
  }
}

Una vez tenemos el programa, y hemos seleccionado el puerto, lo cargamos, y abrimos el monitor Serie.

AbrirMonitorSerieArduinoIDE

Configuramos el mismo Baudrate que hayamos introducido en el código en la función Setup, (en este caso 115200 baudios). En este ejemplo nos pregunta un color de entre los disponibles en un menú. Elegimos el verde. Para ello introducimos el número 3 y le damos al botón Enviar.

EjemploComunicaciónSerie_1

Se comprueba que la transmisión es correcta, pues nos devuelve un mensaje indicando que hemos elegido el color verde.

EjemploComunicaciónSerie_2

Comunicación Serie Arduino – Ordenador utilizando C ++ y Platform IO Ide con VisualStudioCode

En primer lugar usaremos VSCode, y le instalaremos la extensión de platform IO. VSCode puede usarse directamente para sustituir al IDE oficial de Arduino. Para ello, podemos utilizar el botón extensiones del lateral de VSCode, y buscar Arduino:

VSCode_Arduino_install

Sin embargo, en nuestro caso queremos programar la placa Arduino Uno en C/C++ por lo que haremos lo siguiente: Pulsamos el botón lateral, Extensiones, y en la barra de búsqueda superior, escribimos platformIO IDE. Nos aparecerá la siguiente extensión que instalamos:

PlatformIO_IDE_Install

Después reiniciamos VSCode. Una vez inicia de nuevo, veremos la consola de PIO Home, desde la que podremos abrir el proyecto. Según lo haga, nos pedirá configurar el entorno de trabajo:

PlaformIO_WorkingConfiguration

En este caso, vamos a programar en C++ el siguiente código:

//Serial Arduino
#include <SPI.h>

int color = 0;
void setup()
{
   //Set the baudrate of the transmission
   Serial.begin(9600);
}

void loop()
{

   if(color != 10){
       Serial.println("Seleccione un color: ");
       Serial.println("1: Amarillo");
       Serial.println("2: Rojo");
       Serial.println("3: Verde");
       Serial.println("4: Azul");
       Serial.println("5: Negro");
   }
   while(Serial.available() < 2){
       delay(10);  
   }

   if(Serial.available() > 1){
       color = Serial.read();
       switch (color)
       {
           case 49: //Caracter ASCII del 1
               Serial.println("Has elegido el amarillo");
           break;
           case 50: //Caracter ASCII del 2
               Serial.println("Has elegido el rojo");
           break;
           case 51: //Caracter ASCII del 3
               Serial.println("Has elegido el verde");
           break;
           case 52: //Caracter ASCII del 4
               Serial.println("Has elegido el azul");
           break;
           case 53: //Caracter ASCII del 5
               Serial.println("Has elegido el negro");
           break;
           case 10:
           //caracter nueva linea
           break;
           default:
               Serial.println("No has elegido un color de la lista. Vuelve a intentarlo.");
           break;
     }
 }

}
/*********************************************************************************************************
 END FILE
*********************************************************************************************************/

A continuación le damos al botón Build, y después si todo ha ido bien, lo cargamos en la placa.

PlatformIO_Build_and_Upload

Abrimos el monitor Serie, y como en el ejemplo anterior, nos pide un color, introducimos el 3, y nos responde que hemos elegido el verde, lo que demuestra que la comunicación Serie está funcionando:

PlatformIO_WorkingMonitorSerial