Pinguino y la comunicación serie (CDC)

Sep 22 2013

Para enviar y recibir datos entre la PC y la placa Pinguino se utiliza la configuración CDC del puerto USB, lo cual logra emular en la placa pinguino un puerto serie RS232, denominado COMx bajo Windows y /dev/ttyACMx bajo linux. Para recibir datos utilizaremos la orden CDC.read y para enviar CDC.print.

Como enviaremos y recibiremos bytes es necesario declarar algunas variables que serán parámetros de la orden CDC:

unsigned char bytesRecibidos;
unsigned char strLeido[64];

La variable bytesRecibidos almacenará la cantidad de bytes que llegaron a la placa Pinguino y strLeido contendrá en un vector todos los datos que llegaron en forma de cadena de caracteres.

Ahora que tenemos declaradas las variables podemos leer los datos que llegan a la placa utilizando la orden CDC.read dentro de la función loop:

void loop(){
   CONTROL_LINE=1;
   bytesRecibidos=CDC.read(strLeido);
   if (bytesRecibidos>0){
         strLeido[bytesRecibidos]=0;
         if(strLeido[0]==’0′){
                  if (CONTROL_LINE){
                        digitalWrite(0,HIGH);
                        delay(1000);
                        digitalWrite(0,LOW);
                        strLeido[0]=NULL;
                  }
         }
   }
}

Si la comunicación es con Windows es necesario asignar a CONTROL_LINE el valor 1, para activar la conexión. Desde Linux puede o no estar esa instrucción, no es relevante.

Luego de ejecutar la instrucción bytesRecibidos=CDC.read(strLeido) la variable bytesRecibidos tendrá un valor equivalente a la cantidad de bytes que se leyeron, en caso de no recibir nada será 0, strLeido contendrá los datos recibidos si es que los hay.

Luego es cuestión de preguntar si llegaron datos, en caso de ser cierto colocamos un 0 en la ultima posición del vector para finalizar la cadena leída y finalmente, como se observa en el código anterior, se pregunta si el primer caracter que llegó a la placa Pinguino es un 0, de ser cierto y seguir activa la conexión se procede según corresponda y para concluir ponemos el valor recibido como nulo, con el fin de no volver a procesarlo.

Para enviar datos a la PC lo hacemos con CDC.print:

if (CONTROL_LINE){
CDC.print(“Girando a la izquierda”,22);
}

Aquí preguntamos si la conexión está activa y enviamos la cadena junto a su longitud, en este caso se envían 22 caracteres.

Listo, compilamos, pasamos el programa a la placa Pinguino y resta programar la aplicación de la PC, lo cual puede ser en cualquier lenguaje. Para ver si funciona sin desarrollar el programa de la PC podemos hacerlo mediante PuTTY.

No responses yet

Deje aquí su comentario