Paso 5: código
Usé una versión ligeramente modificada del código que usé en mi mesa de infinity con proyecto herramientas de casual. Lo pongo aquí para descargar y listo pero es fácil encontrar inspiración (y todas las bibliotecas requeridas) en adafruit, o aquí en la Web de Instructables. Mi código es bastante básico y ciclos diferentes visualizaciones de colores únicos, arco iris, giros etc..
El siguiente paso (cuando tengo tiempo) será añadir un pequeño piezo o micrófono y la pantalla reacciona a la música como un ecualizador físico de animación (donde notas cambiar el color y el volumen la intensidad de la luz por ejemplo).
Actualizaciones sobre esto en el futuro.
CÓDIGO:
#include
#define PINdroite 1 #define STRIPSIZE 12
Parámetro 1 = número de píxeles en tira / / parámetro 2 = número de pin (la mayoría son válidos) / / parámetro 3 = tipo de pixel banderas, sumar como sea necesario: / / NEO_KHZ800 800 KHz bitstream (mayoría NeoPixel productos w/WS2812 LED) / / NEO_KHZ400 400 KHz (clásico 'v1' (no el v2) FLORA pixeles, WS2811 controladores) / / NEO_GRB píxeles están cableados para GRB bitstream (más productos de NeoPixel) / / NEO_RGB píxeles están cableados para RGB bitstream (v1 píxeles de FLORA no v2) tira de Adafruit_NeoPixel = Adafruit_NeoPixel (STRIPSIZE, PINdroite, NEO_GRB + NEO_KHZ800);
void setup() {strip.begin(); strip.setBrightness(60); / / bajar brillo y salvar ojos! strip.show(); / / inicializar todos los píxeles en 'off'}
void loop() {/ / algunos procedimientos de ejemplo que muestra cómo mostrar a los píxeles: colorWipe (de la tira. Color(0,0,0), 25); ColorWipe negro (de la tira. Color(64, 0, 0), 100); ColorWipe rojo (de la tira. Color(0, 64, 0), 100); ColorWipe verde (de la tira. Color(0, 0, 64), 100); Azul colorWave(75); colorWipe (de la tira. Color(0,0,0), 100); Rainbow(15) negra; colorWipe (de la tira. Color(0,0,0), 100); RainbowCycle(15) negra; colorWipe (de la tira. Color(0,0,0), 100); ColorWave(30) negra; }
Llene los puntos uno tras otro con un colorWipe vacío de color (uint32_t c, uint8_t espera) {para (uint16_t i = 0; i
sin efecto arco iris (uint8_t espera) {uint16_t i, j;
para (j = 0; j < 256; j ++) {para (i = 0; i
Ligeramente diferente, esto hace que el arco iris, igualmente distribuido por vacío rainbowCycle (uint8_t espera) {uint16_t i, j;
para (j = 0; j < 256 * 5; j ++) {/ / 5 ciclos de todos los colores en la rueda para (i = 0; i < strip.numPixels(); i ++) {strip.setPixelColor (i, rueda (((i * 256/strip.numPixels()) + j) y 255));} strip.show(); delay(wait);}}
Un valor de 0 a 255, para obtener un valor de color de entrada. Los colores son una transición r - g - b - a r. rueda de uint32_t (bytes WheelPos) {if(WheelPos < 85) {return tira. Color (WheelPos * 3, 255 - WheelPos * 3, 0); } else if(WheelPos < 170) {WheelPos-= 85; tira de vuelta. Color (255 - WheelPos * 3, 0, WheelPos * 3); } else {WheelPos-= 170; tira de vuelta. Color (0, WheelPos * 3, 255 - WheelPos * 3); } }
/ ** * ^ ^ ^ * ~ ~ ~ ColorWave ~ ~ ~ * V V V * / void colorWave (uint8_t espera) {int i, j, stripsize, ciclo; float ang rsin gsin, bsin, offset;
Static int tick = 0; stripsize = strip.numPixels(); ciclo = stripsize * 25; veces alrededor del círculo...
mientras que (++ % ciclo de la señal) {offset = map2PI(tick);
para (i = 0; i < stripsize; i ++) {ang = map2PI(i) - offset; rsin = sin(ang); gsin = pecado (2.0 * ang / 3.0 + map2PI(int(stripsize/6))); bsin = pecado (4.0 * ang / 5.0 + map2PI(int(stripsize/3))); strip.setPixelColor (i, tira. Color(trigScale(rSin), trigScale(gsin), trigScale(bsin))); }
Strip.Show(); Delay(Wait); }
}
/ ** * Devuelve un valor desde una función trig a un valor de byte de la escala. * [-1, + 1] -> [0, 254] * Nota que ignorar el valor posible de 255, para la eficiencia, * y porque nadie será capaz de diferenciar entre la * niveles de brillo de 254 y 255. * / byte trigScale(float val) {val += 1.0; / / mueva la estufa a [0.0, 2.0] val * = 127.0; / / mueva la estufa a [0.0, 254.0]
int(val) retorno y 255; }
/ ** * Asignar un entero así que [0, striplength] -> [0, 2PI] * / float map2PI(int i) {volver PI*2.0*float(i) / float(strip.numPixels());}
/ CÓDIGO