13 de mayo de 2012

Arduino: Una LED parpadea: el "hola mundo" de Arduino

Este es un ejercicio basado en el que podemos ver en http://ardx.org/CIRC01
Es lo más básico que podemos hacer con una Arduino tras haber instalado el compilador y haberla conectado a nuestro PC. Podemos ver el resultado final en este vídeo:

 

Este el código que he utilizado para la primera parte: el parpadeo.

/*
 * Enciende una LED durante un segundo y luego la apaga durante un segundo
 * y repetir, sieeempre repetir
 *
 */

int ledPin = 13; // Conectamos una LED en el pin digital 13

// El metodo setup() se ejecuta una sola vez: al principio del programa
void setup()
{
  pinMode(ledPin, OUTPUT); // Inicializa el pin digital como de salida
}

// El metodo loop() se repite una y otra vez, hasta que desenchufemos la Arduino
void loop()
{
  digitalWrite(ledPin, HIGH); // Encendemos la LED
  delay(1000); // Esperamos 1 segundo
  digitalWrite(ledPin, LOW); // Apagamos la LED
  delay(1000); // Esperamos 1 segundo
}

Como vemos, es muy sencillo: enciendo LED, espero, apago LED, espero... y repetimos.

Una variante algo más interesante es la siguiente, en la que en vez de encender y apagar vamos variando la intensidad paulatinamente de apagado a encendido y viceversa:

/*
 * Haciendo un fade (aumenta y disminuye el brillo suavemente) en una LED
 *
 */

int ledPin = 9; // Defino el pin en el que ira la LED

void setup()
{
  pinMode(ledPin, OUTPUT); // Indico que ese pin sera de salida
}

void loop()
{
  // Variamos el brillo desde 0 hasta el máximo de 5 en 5
 for(int brillo = 0; brillo <= 255; brillo += 5) 
    { 
      analogWrite(ledPin, brillo); // aplicamos el brillo (entre 0 y 255)
      delay(30);  // pausamos durante 30 milisegundos, para poder ver el efecto                           
    } 
  
 delay(250); // una pequeña pausa estando a brillo máximo
  
  // Variamos el brillo desde 255 hasta 0 de 5 en 5
 for(int brillo = 255; brillo >= 0; brillo -=5) 
    {
      analogWrite(ledPin, brillo); // aplicamos el brillo (entre 255 y 0)
      delay(30);  // pausamos durante 30 milisegundos, para poder ver el efecto                
    } 
    
 delay(250); // una pequeña pausa estando a brillo mínimo
 
En esta variante, utilizamos un bucle para ir "enviando" la intensidad al LED. En realidad, no es que indiquemos "brillo al 100%" cuando ponemos 255, si no que la Arduino manda un pulso constante. Para el "brillo al 50%" (sobre 127) no es enviemos un pulso más "suave", si no que se mandan pulsos muy muy cortos al LED y parece que brilla menos (no podemos percibirlos por lo rápidos que son, pero sí notamos que baja la intensidad).