Paso 1: El código
#include < Wire.h > #include < Adafruit_TCS34725.h > #include < Adafruit_LSM303.h > #include < Adafruit_NeoPixel.h > / / 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_RGB píxeles están cableados para flujo de bits RGB / / NEO_GRB píxeles están cableados para GRB bitstream / / bitstream NEO_KHZ400 400 KHz (por ejemplo píxeles de FLORA) / / NEO_KHZ800 800 KHz bitstream (p. ej. tira de LED de alta densidad) #define NUM_PIXELS 4 Tira de Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_PIXELS, 6, NEO_GRB + NEO_KHZ800); Adafruit_TCS34725 color_sensor = Adafruit_TCS34725 (TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X); Adafruit_LSM303 accel; #define STILL_LIGHT / / definir si la luz es estar en cuando no hay movimiento. De lo contrario oscuro / / nuestro RGB -> gamma reconocido ojo color byte gammatable [256]; int g_red, g_green, g_blue; colores globales leer color sensor int j; lío con este número para ajustar TWINklitude :) / inferior número = más sensibles #define MOVE_THRESHOLD 45 int de #define FADE_RATE 5 led = 7; doble newVector; anular el flash (int veces) {para (int i = 0; me < veces; i ++) {digitalWrite (led, alto); / / enciende el LED (alto es el nivel de voltaje) delay(150); / / espere un segundo digitalWrite (led, baja); / / apagar el LED haciendo el delay(150) de baja tensión;}} float r, g, b; doble storedVector; void setup() {pinMode (led, salida); / / tratar de inicializar y advertir si no pudimos detectar el chip si (! accel.begin()) {Serial.println ("Oops... no se puede inicializar el LSM303. Compruebe el cableado!"); mientras (1) {flash(4); delay(1000);}; } strip.begin(); Strip.Show(); Inicializar todos los píxeles en 'off' si (! color_sensor.begin()) {Serial.println ("TCS34725 No encontrado... cheque las conexiones"); mientras que (1) {flash(3); delay(1000);};} / PhilB agradece esta tabla gamma! ayuda a convertir colores RGB a lo que los seres humanos ven para (int i = 0; me < 256; i ++) {flotador x = i; x = 255; x = pow (x, 2.5); x * = 255; gammatable [i] = x;} //this secuencia parpadea el primer píxel tres veces / / como una cuenta atrás para la lectura de color. para (int i = 0; i < 3; i ++) {/ / blanco, pero dimmer--255 para todos los tres valores es cegador
! strip.setPixelColor (0, tira. Color (188, 188, 188)); Strip.Show(); Delay(1000); strip.setPixelColor (0, tira. Color (0, 0, 0)); Strip.Show(); Delay(500); } uint16_t claro, rojo, verde, azul; color_sensor.setInterrupt(false); encender LED delay(60); tarda 50ms a leer color_sensor.getRawData (& rojo y verde y azul y claro); color_sensor.setInterrupt(true); Apagar LED / / averiguar código hexagonal básica por suma de visualización uint32_t = rojo; suma += verde; suma += azul; suma = claro; r = rojo; r = suma; g = verde; g = suma; b = azul; b = suma; r * = 256; g * = 256; b * = 256; g_red = gammatable [(int) r]; g_green = gammatable [(int) g]; g_blue = gammatable [(int) b]; Obtener la magnitud (longitud) del vector 3 ejes / / http://en.wikipedia.org/wiki/Euclidean_vector#Length accel.read(); storedVector = accel.accelData.x*accel.accelData.x; storedVector += accel.accelData.y*accel.accelData.y; storedVector += accel.accelData.z*accel.accelData.z; storedVector = sqrt(storedVector); } void loop() {/ / obtener nuevos datos accel.read(); doble newVector = accel.accelData.x*accel.accelData.x; newVector += accel.accelData.y*accel.accelData.y; newVector += accel.accelData.z*accel.accelData.z; newVector = sqrt(newVector); / / nos movemos si (abs (newVector - storedVector) > MOVE_THRESHOLD) {colorWipe (de la tira. Color(0, 0, 0), 0); flashRandom (10, 25); primer número es el retraso de 'esperar', / / menor num == menor twinkle / segundo número es cuántas neopixels a / / encienden simultáneamente} #ifdef STILL_LIGHT else {colorWipe (de la tira. Color (gammatable [(int) r], gammatable [(int) g], gammatable[(int)b]), 0); storedVector = newVector; } #endif} void flashRandom (int espera, cuantos uint8_t) {para (uint16_t i = 0; i < cuantos; i ++) {para (int simul_pixels = 0; simul_pixels < 8; simul_pixels ++) {/ / obtener un pixel aleatorio de la j de la lista = random(strip.numPixels()); strip.setPixelColor (j, tira. Color (g_red, g_green, g_blue)); } strip.show(); Delay(Wait); colorWipe (de la tira. Color(0, 0, 0), 0); Ahora que 'desteñirá' FADE_RATE pasos para (int x = 0; x < FADE_RATE; x ++) {int i = g_red * (x + 1); r = FADE_RATE; int g = g_green * (x + 1); g = FADE_RATE; int b = g_blue * (x + 1); b = FADE_RATE; strip.setPixelColor (j, tira. Color (r, g, b)); Strip.Show(); Delay(Wait); } / / y se descoloran hacia fuera para (int x = FADE_RATE; x > = 0; x--) {int r = g_red * x; r = FADE_RATE; int g = g_green * x; g = FADE_RATE; int b = g_blue * x; b = FADE_RATE; strip.setPixelColor (j, tira. Color (r, g, b)); Strip.Show(); Delay(Wait); colorWipe}} #ifdef STILL_LIGHT (de la tira. Color (gammatable [(int) r], gammatable [(int) g], gammatable[(int)b]), 0); #endif} / / rellenar los puntos uno tras otro con un colorWipe vacío de color (uint32_t c, uint8_t espera) {para (uint16_t i = 0; i < strip.numPixels(); i ++) {strip.setPixelColor (i, c); strip.show(); delay(wait);}}