Luces de cores – IDE

Aquí tes algúns exemplos para traballar cos LEDs RGB. Tes información sobre a conexión e montaxe nesta páxina.

Así o anunciamos en twitter:

Como funcionan

Un LED RGB ( R= red, vermello, G= green, verde e B= blue, azul) é un LED que incorpora tres LEDs no mesmo encapsulado, de xeito que se poden formar miles de cores axustando de maneira individual a intensidade de cada LED. Cada LED RGB neopixel inclúe estes 3 LEDs xunto a un circuíto controlador responsable de recibir os datos do LED anterior e envialos ao seguinte, de xeito que todos os LEDs se controlan desde unha soa liña de datos. No caso do mClon, a tira de LEDs conectarémola no pin 13.

Dependendo da intensidade de cada un dos LEDs RGB obteremos diferentes cores, como podes ver nos seguintes exemplos:

[By Quark67 CC BY-SA from Wikimedia]

  • Branco: RGB= 255,255,255
  • Vermello: RGB= 255,0,0
  • Verde: RGB= 0,255,0
  • Azul: RGB= 0,0,255
  • Negro (Apagado): RGB= 0,0,0
  • Amarelo: RGB= 255,255,0
  • Maxenta: RGB= 255,0,255
  • Cian: RGB= 0,255,255

Tomando outros valores podemos conseguir un total de 256 x 256 x 256 = 16.777.216 cores distintas.

Ollo! Os LEDs RGB neopixel que eliximos para o mClon non son realmente RGB, senón GRB. É dicir, o vermello e o verde están cambiados. Por exemplo, se queres a cor verde debes poñer 255,0,0 e se queres vermello 0,255,0.

Programación de 2 LEDs

O primeiro que debemos facer é incluír a librería Adafruit_NeoPixel (Vai a Sketch -> Incluír biblioteca -> Xestionar bibliotecas – > busca “NeoPixel” -> Instalar)

O led esquerdo será o 0 e o led dereito será o 1. Para asignar as cores deberás introducir os valores GRB, desde 0 ata 255.

// Librería

#include <Adafruit_NeoPixel.h>
  // Para un conxunto de leds o primeiro é o 0, o seguinte o 1, e así sucesivamente.
  // pixels.Color toma valores RGB, desde 0,0,0 hasta 255,255,255
  // no mClon verde e vermello van cambiados (GRB)
  

// Declaración de variables

#define PIN       13  // Pin da tira de Leds
#define NUMPIXELS 2   // Número de Leds
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); //define o obxecto pixels

// Configuración

void setup() {
  pixels.begin(); // Inicializa a libreria NeoPixel.
}

// Bucle

void loop() {

  //acender os leds de cor vermella (GRB)

    pixels.setPixelColor(0, pixels.Color(0,255,0)); // Asigno vermello ao led esquerdo
    pixels.setPixelColor(1, pixels.Color(0,255,0)); // Asigno vermello ao led dereito
    pixels.show(); // Actualiza os leds.
    delay(500);

  //acender os leds de cor verde (GRB)

    pixels.setPixelColor(0, pixels.Color(255,0,0)); // Asigno verde ao led esquerdo
    pixels.setPixelColor(1, pixels.Color(255,0,0)); // Asigno verde ao led dereito
    pixels.show(); // Actualiza os leds.
    delay(500);   

  //apagar os leds
  
    pixels.setPixelColor(0, pixels.Color(0,0,0)); // Apago o led esquerdo
    pixels.setPixelColor(1, pixels.Color(0,0,0)); // Apago o led dereito
    pixels.show(); // Actualiza os led.
    delay(1000);
  
}

Podemos facer que os LEDs alumeen con cores aleatorias. Habería que crear unhas variables R, G e B e asignarlles uns valores ao chou utilizando a función random. Segundo o tempo de espera que poñas cambiará de cor con maior ou menor frecuencia.

void loop() {

  int R=random(0,255);
  int G=random(0, 255);
  int B=random(0, 255);

  //acender os leds dunha cor ao chou (GRB)

    pixels.setPixelColor(0, pixels.Color(G,R,B)); // Asigno vermello ao led esquerdo
    pixels.setPixelColor(1, pixels.Color(G,R,B)); // Asigno vermello ao led dereito
    pixels.show(); // Actualiza os leds.
    delay(500);
  
}

Cando programes os LEDS RGB ten en conta que os LEDs quedarán sempre no último estado que adquiran. Se queres apagalos terás que indicalo no programa.

Programación de tiras e aneis de LEDs

Se temos moitos leds sería moi tedioso ir indicando o que debe facer cada led un por un, polo que usaremos a instrución for(inicio,condición,modificador) { proceso } para dar as ordes.

O primeiro que debemos indicar é cantos leds temos e onde están conectados. No noso exemplo temos 8 leds conectados no pin 13. Despois declaramos as variables e configuramos igual que no programa anterior.

#define PIN       13  // Pin da tira de Leds
#define NUMPIXELS 8   // Número de Leds

Para programar utilizamos a instrución for. Neste exemplo iremos acendendo os leds de forma consecutiva e despois apagarémolos tamén de forma consecutiva, no mesmo sentido.

void loop() {

  // Acender os leds consecutivamente dunha cor determinada

  for(int i=0;i<NUMPIXELS;i++){

    pixels.setPixelColor(i, pixels.Color(10,20,100)); 
    pixels.show(); 
    delay(200); // espera para o acendido de cada led.
  }

  // Apargar os leds consecutivamente
  
  for(int i=0;i<NUMPIXELS;i++){ 
    pixels.setPixelColor(i, pixels.Color(0,0,0)); 
    pixels.show(); 
    delay(200);
  }
  
}

Prácticas 2 leds

  • Modifica o anterior programa para que as cores do LED RGB esquerdo e do dereito cambien de forma independente.
  • No programa de seguir unha liña, fai que cando o mClon vaia dentro da liña os dous LEDs estean apagados, cando saia da liña pola dereita o LED dereito se poña vermello, cando saia pola esquerda se poña vermello o LED esquerdo, e cando o robot estea cos dous sensores fóra da liña se poñan os dous LEDs vermellos.

Prácticas tira de leds

  • Fai que os leds se vaian acendendo consecutivamente nun sentido e despois apagándose en sentido contrario.
  • Fai que cada led se acenda e apague de forma consecutiva, simulando “o coche fantástico”.