h1

Arduino (II) Empezando con Arduino.

1 febrero 2009

Como es habitual cuando estamos aprendiendo un lenguaje de programación, compilamos nuestro primer programa como un “Hola mundo”, en esta ocasión para que Arduino me salude hice parapadear un Led. No publico su código porque está en la documentación de Arduino. Ahora voy a presentaros alguna de las funciones que me acompañarán a lo largo del proyecto, estas son las funciones para utilizar el puerto serie.

En primer lugar Arduino requiere unos requisitos necesarios, una instalación para empezar a recibir/enviar información codificada en ASCII. Esta instalación no es más que indicar el número de puerto de comunicaciones que estamos utilizando y la velocidad de transferencia en baudios (enlace). Esta instalación se hace utilizando la función Serial.begin(velocidad de transferencia en baudios).

Enviando por puerto serie

Para enviar, después de haber preparado todo para la comunicación sólo tenemos que utilizar las funciones Serial.print(VAR), para enviar por puerto serie lo que se encuentre en la variable VAR.

Aquí un ejemplo básico:

int interruptor = 0; // inturruptor conectado al pin 0
//Instalacion
void setup() {
  pinMode(interruptor, INPUT);  // pin 0 como entrada
  Serial.begin(9600);         // empieza la comunicacion a 9600bps
}
void loop() {
  if(digitalRead(interruptor) == HIGH)  // si el interruptor esta ON
  {
    Serial.print(1);                  // envia 1
  }else{
    Serial.print(0);                  // en otro caso envia 0
  }
  delay(100);                         // espera 100ms
}

Este programa enviará 1 si el interruptor esta cerrado y 0 si el interruptor está cerrado.

Recibiendo por puerto serie

Para recibir, al igual que con cualquier operación que requiera el uso del puerto serie, después de iniciar la comunicación tendremos todo listo para usarlo. Ya sólo tenemos que utilizar la función Serial.read() para leer el puerto.

Aquí un ejemplo básico:

int ledpin = 1;
//Instalacion
void setup() {
  pinMode(ledpin, OUTPUT);  // pin como salida
  Serial.begin(9600);       // empieza la comunicacion a 9600bps
}
void loop() {
  char val;
  if( Serial.available() )       // si la informacion esta lista para leer
  {
    val = Serial.read();         // leerla y guardarla en 'val'
  }
  if( val == 'A' )               // si 'A' es recibido
  {
    digitalWrite(ledpin, HIGH);  // enciende el led
  } else {
    digitalWrite(ledpin, LOW);   // en otro caso apagala
  }
  delay(100);                    // espera 100ms
}

Este programa lee el puerto serie y si recibe una A, encenderá el led en otro caso lo apagará.

Para descargar los programas aquí:

http://forja.rediris.es/frs/download.php/1091/enviandoPuertoSerie.pde

http://forja.rediris.es/frs/download.php/1092/recibiendoPuertoSerie.pde

Anuncios

11 comentarios

  1. Me tienes fascinada y esperando que llegue el domingo para ver los avances. Estas haciendo una gran labor


  2. Gracias por el apoyo y me alegra que te guste mi trabajo.


  3. Buenas!! acabo de adquirir una arduino y buscando programaas para interactuar con ella he llegado a tu blog.
    Antes de nada darte las gracias por compartir tus códigos, seguro que son de gran utilidad para mucha gente!!!
    Un apunte: en el código de “recibir por el puerto serie”, hay un error en la declaracion de variables:
    int ledping = 1;
    sobra la “g”. 😉
    Una pregunta: Probando tu código de “recibir por el puerto serie”… no me funciona… pulso la “A” pero no me funciona tengo que bajarme algun otro programa para que haya comunicacion directa entre arduino y teclado??
    Muchas gracias!!!!
    Jon


  4. Hola Jon,

    Gracias por el error ya lo he corregido 🙂

    Para ver el problema de por qué no enciende el led. ¿A qué puerto tienes conectado el led? ¿Has conectado la otra patilla del led a GND? ¿A qué velocidad te conectas por puerto serie a Arduino (debe de ser 9600)? ¿Envías la A mayúscula?

    Comprueba éstas cosas y me cuentas. Te invito a que utilices el foro así centralizamos las dudas: http://forja.rediris.es/forum/forum.php?forum_id=1343

    Un saludo.


  5. Buenos días!
    Perdona que no te haya contestado antes!
    Sigue sin funcionarme…
    he comprobado todo… conexcion al puerto COM8 a una velocidad de 9600bps…
    Ahora mismo posteo la duda en el foro! a ver si sale adelante!
    muchas gracias por tu ayuda! de verdad!!!

    un saludo y buen día!


  6. Buenas de nuevo!
    Por fin me funciona! no entiendo muy bien por qué,pero ahora lo hace!
    Muchas gracias por tu ayuda!
    Ahora lo que quiero es adaptar tu ejemplo de “envio por el puerto serie”, para que sea el Flash el que recoja los datos… es decir, si pulso un boton conectado a arduino, esto provoque un evento en flash. a ver si lo consigo y lo comparto! si tienes alguna información al respecto te lo agradecería.
    Muchas gracias de nuevo!


  7. Hola Jon,

    Bien, ya puedes empezar a jugar con Arduino 🙂

    Siendo sincero, no he trabajado nunca con flash por lo que no puedo ayudarte, pero si me gustaría que todos los avances que hagas los compartas con la comunidad. Seguro que más de uno se va a encontrar con el problema que planteas.

    Un saludo.


  8. no me queda muy claro, en el ordenador no hay que programar nada, para mandar¿ es decir como puedo encender una luz desde el ordenador?será necesario hacer algún programa en el no?


    • Hola Santiago,

      Puedes ver los avances del proyecto en las entradas más recientes del blog, ahí quedarán resueltas tus dudas.

      Un saludo.


  9. Oye man necesito como puedo recojer los datos por el puerto usb, ya q la tarjetas de programacion actuales no tienen puerto serial, otra cosa q tan facil o complicado es hacer una interface con labview o q programa me recomiendas para lograr el objetivo, espero alguna respuesta porq estoy apunto de adquirir alguna tarjeta http://articulo.mercadolibre.com.mx/MLM-36623394-arduino-programador-usb-atmega-atmel-no-pic-_JM


    • Para leer por el puerto serie puedes ir a la documentación disponible en http://www.arduino.cc/es

      Y para crear una interfaz para labview tendrás que buscar un poco más 🙂 no se como podrías realizarla.

      Un saludo



Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: