/*
LED RGB inteligente. NEOPIXEL, modelo WS2812.
Una versión más moderna es el WS2812B.
A diferencia del led rgb previamente tratado, el neopixel incorpora un encapsulado con un microchip
que controla los componentes rojo, verde y azul. Desde arduino solo se debe indicarle que colo o colores deseamos encender
con una sola línea de control.
Se puede trabajar con una cadena de LEDS.
Solo se envóan datos al primer pixel y este lo transmitirá a los otros pixeles de la tira.
También se úeden encadenar tiras entre sí. Hay pines que se encargan de transmitir los datos.
Esta tira no tiene pines ni cables para la conexión. Hay que soldarle tres cables.
Es recomendable usar para estos casos un cable de un único conductor que suelen ser más rígidos.
Se tiene una facilidad en conexión a protoboard.
Conexionado en el capítulo 29.
Ver los valores recomendados de la resistencia a utilizar por el fabricante.
Se debe alimentar a arduino con una fuente externa de tensión continua de entre 6 y 12V
por que el consumo de corriente está al límite de lo que provee el cable USB de la computadora.
Usando la fuente externa, no se pone al límite el puerto USB de la computadora.
*/
// Se importa librería de adafruit.
#include <Adafruit_NeoPixel.h>
// Primer parámetro = cantidad de pixeles en la tira
// Segundo parámetro = pin de conexión a Arduino
// Tercer parámetro (suma de dos constantes):
// NEO_KHZ800 800 KHz velocidad de datos (WS2812 y nuevos)
// NEO_KHZ400 400 KHz velocidad de datos (WS2811 y más antiguos)
// NEO_GRB flujo de datos en orden GRB (WS2812 y nuevos)
// NEO_RGB flujo de datos en orden RGB (versiones más antiguas)
// Se crea un objeto llamado "tira".
// Con el objeto, podemos usar sus funciones asociadas para enviar comandos a la tira
Adafruit_NeoPixel tira = Adafruit_NeoPixel(8, 2, NEO_GRB + NEO_KHZ800);
void setup() {
tira.begin(); // Se inicializa la tira
// Se utiliza en el loop. Se envía el comando para mostar lo que se programó con anterioridad.
// En este caso, como es el setup no se muestra nada (todos los pixeles apagados)
tira.show();
}
void loop() {
// los neopixels son muy brillantes, probar los distintos niveles de brillo
tira.setBrightness(20); // brillo global para toda la tira (entre 0 y 255)
for(int i = 0; i < 8, i++){
// Es la función más importante de la librería para comandar el pixel.
// posición -> que pixel es el que se desea configurar. Inicia desde 0.
// RGB valor de cada color, rojo, verde y azul.
tira.setPixelColor(i, 0, 0, 255); // posición, R, G, B
// setPixelColor solo configura el pixel, pero no envía el comando para que se muestre.
// show da el comando para enviar los datos a la tira que se definen previamente
tira.show();
delay(500);
}
// clear se usa para apagar todos los pixeles
tira.clear();
}