Cómo programar leds con Arduino

Programar leds con Arduino

Vale pues ya hemos visto cómo montar las luces del árbol de Navidad, pero han quedado un poco sosas, ¿no? Luces intermitentes ahí puestas sin más. ¡De ésas venden en el chino de debajo de mi casa!. ¡Vamos al lío que vas a programar leds con Arduino, ya verás!

Antes teníamos los leds en paralelo o serie, ahora lo que haremos será modificar el código. Los ingredientes de hoy son los mismos que ya utilizaste:

Ingredientes Led Arduino

El código que tenías antes era este:

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

Enciendo tus leds a velocidades de vértigo

Hasta ahora has jugado con sólo un pin. Montemos otro led el pin 12. Para ello tienes que configurar el pin 12 para que sea una salida y luego escribir un HIGH o un LOW según convenga. Algo como esto:

void setup() {
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);

}


void loop() {
  digitalWrite(13, HIGH); 
  digitalWrite(12, LOW);  
  delay(1000);   
  
  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);   
  delay(1000);           
}

Así que sólo te queda conectar un led en 12 y otro en 13 para ver qué pasa.

Arduino con 2 leds

De esta manera lo que ha sucedido es que cuando el LED del pin 12 se ilumina el del 13 se apaga y viceversa. ¿La razón? El HIGH y LOW. Si te fijas cuando el 13 está en HIGH (le llega la corriente) el 12 lo pongo en LOW (apagado). ¿Sabrías hacer que funcionasen emparejados? Anda que es fácil, ¡Dale!

Ahora fíjate en el delay. Un delay es una espera y lo que tienes al lado es el número de milisegundos a esperar (1.000 milisegundos=1 segundo). Prueba a cambiar el delay a 500 y verás como va más ligerito. Ahora prueba con 200,100,50,…

¿Qué pasa al llegar a 20? Qué empieza a parpadear muy poco. Si bajas a 10 el delay verás que el led ya no se enciende y se apaga. ¿Por qué? En realidad sí se apaga y enciende pero lo hace con tal rapidez que no somos capaces de notarlo por lo qu eparece que siempre esté encendido.

El efecto desvanecimiento en leds

Ahora vete a los ejemplos otra vez y busca el programa Fade en Fichero>Ejemplos>01.Basics>Fade. Y cambia en la línea 10 el número 9 por el 10:

int led = 10;           // the pin that the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by

// the setup routine runs once when you press reset:
void setup() {
  // declare pin 9 to be an output:
  pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  // set the brightness of pin 9:
  analogWrite(led, brightness);

  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;

  // reverse the direction of the fading at the ends of the fade:
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }
  // wait for 30 milliseconds to see the dimming effect
  delay(30);
}

Dale a la flecha para compilar y subir el programa a la placa. ¿Ves como el led en el pin10 aumenta poco a poco su intensidad y luego la disminuye? Fíjate en el código; tienes unas variables declaradas y luego el pin 10 (ex-pin 9) definido como salida o OUTPUT.

En el bucle o loop lo que sucede es que Arduino escribe en el led la variable brightness, la cuál si miras en el inicio del programa es igual a 0. Pero luego se le suma la otra variable del inicio que vale 5. Luego hay una estructura condicional.

Esto es como cuando tu madre te decía: Si apruebas te compro la play, si no te llevarás un capón. Es así de simple. Aquí se dice: si (if) la variable brightness es 0 ó (las baritas || significa ó, ¡que rarunos!) 255 se hace que la variable fadeAmount se convierta en -5. Aquí no hay otra condición ni nada entonces si no sucede uno de esos dos casos no se hace nada. Luego se espera en el delay y vuelve a empezar.

Esto hace que empiece en 0 el brightness, luego vaya aumentando de 5 en 5 hasta 255 y ahí ya empiece a restar de 5 en 5 hasta llegar al 0. ¿Qué pasa si cambias el 255 por 125? Que sube y baja más rápido ya que no llega a su tope. ¿Y si en lugar de 255 pones 325? Qué hace una cosa rara. Sube y cuando la luminosidad es máxima, baja de repente y luego vuelve a subir de repente. La razón es porque la información se envía en bytes que tienen 256 posiciones (de 0 a 255) y estás sobrepasando eso entonces hay un overflow.

Tranqui que otro día te lo cuento mejor. Ahora conectas el led del pin12 en el 9 (mira, me ha dao por ahí) y te paso el código para que el led del pin9 haga el mismo efecto pero que funcione a la contra del led 10:

int led = 10;           // the pin that the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by
int antibrightness = 255;

// the setup routine runs once when you press reset:
void setup() {
  // declare pin 9 to be an output:
  pinMode(led, OUTPUT);
  pinMode(9, OUTPUT);
  
}

// the loop routine runs over and over again forever:
void loop() {
  // set the brightness of pin 9:
  analogWrite(led, brightness);
  analogWrite(9, antibrightness);

  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;
  antibrightness = antibrightness - fadeAmount;

  // reverse the direction of the fading at the ends of the fade:
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }
 
  // wait for 30 milliseconds to see the dimming effect
  delay(30);
}

Se entiende, ¿no? El pin 9 utiliza la variable antibrightness que lo que hace es restar en lugar de sumar y es por eso que van en contra. Cuando uno crece el otro decrece y viceversa. Es una simple operación matemática. ¿Lo pillas? ¿Alguna duda? Déjamela en los comentarios y..¡Éxitos!

[Total:8    Promedio:4.1/5]
Opt In Image

Déjame un comentario que en el fondo soy buen chaval

  1. Responder

  2. Responder

  3. Responder

  4. Responder

    • Responder

  5. Daniel

    Responder

    • Responder

  6. Carlos

    Responder

    • Responder

      • Carlos

        Responder

        • Responder

  7. Jose

    Responder

    • Responder

  8. Luis Fdo Jaramillo

    Responder

    • Responder

Deja un comentario