Página principal

Arduino
Control de entradas mediante rs232
Librería SDL

xsetaseta@gmail.com

Esta es la continuación de mi anterior trabajo Arduino ,Control de salidas mediante rs232 .
Ahora mi pretensión es hacer un monitor de las 18 entradas del arduino, mandado la información mediante conexión serie rs232 al PC. En el PC se ha realizado un programa mediante la librería SDL donde se muestra el estado de cada entrada  con un piloto verde.
Como lenguaje he utilizado el C, hubiese sido mas fácil hacerlo en Visual Basic en Windows y en Gambas bajo Linux, pero mi meta era hacerlo multiplataforma y utilizar el mismo código para ambas plataformas.

El funcionamiento del programa en la parte de arduino es la siguiente:
Cuando se quiere leer el puerto PORTB del micro, se manda una orden desde el PC "IPORTB" al arduino mediante la conexión rs232. En el arduino se procesa esta orden devolviendo el valor del puerto como "PORTB=valor" donde valor es el número leído en el PORTB. Funciona como un cliente-servidor, uno pide y el otro contesta. Existe otro modo llamado "AUTO"  que transmite los valores de los tres puerto cada segundo. Este modo se activa o desactiva mediante la orden AUTO y NOAUTO.
Para mandar las ordenes al arduino se puede utilizar la consola del programador de arduino o cualquier otro programa de comunicaciones como por ejemplo CuteCom o minicom en  Linux.

  if(!strcmp(entrada,"IPORTB"))
      {
       Serial.print("PORTB=");
       Serial.println(PINB);
       goto salir1;
      }
     
    if(!strcmp(entrada,"IPORTC"))
      {
       Serial.print("PORTC=");
       Serial.println(PINC);  
       goto salir1;
      }
    if(!strcmp(entrada,"IPORTD"))
      {
        Serial.print("PORTD=");   
        Serial.println(PIND);   
       goto salir1;
      }
 
Ejemplo de una parte del programa del arduino.

En la parte del PC como se ha dicho antes se realizó el programa mediante la librería multiplataforma SDL. La monitorización de las entradas se realizan mediante luces verdes en forma de led que se encienden o se apagan dependiendo del estado de las 18 entradas de el arduino. También he querido añadir un pequeño sonido cuando se detecta un cambio en cualquiera de las entradas.
He añadido 3 velocidades de lectura de los puertos 1 Segundo, 0,5 Segundos y 0,3 Segundos. Este es el retardo máximo entre el cambio de estado de una entrada y su representación en la pantalla del PC.
El programa admite el argumento del puerto de comunicaciones. En caso de no poner ningún argumento, asume en Linux  "/dev/ttyUSB0"  y en Windows "COM3" .
Para manejar el puerto bajo Windows he visitado www.mcbtec.com  donde existe un buen tutorial.


El programa funcionando.

Programa


Lo que me satisface más, es el poder compilar para las dos plataformas, Linux o Windows, con solo cambiar la directiva YesWindows 0 por #define YesWindows 1 .
Como he dicho en el anterior trabajo, la programación se ha realizado en Linux  con el IDE Anjuta, y en Dev-C++ bajo Windows.

Antes de nada he de pedir perdón por la forma de programar que tengo, un poco desordenada y poco optimizada en algunos casos. También he probado formatear el código fuente mediante programas al efecto, pero el resultado no me satisfacía demasiado.



Un saludo.
Juan Galaz