#include #include #include #include // Parameter 1 = number of pixels in strip // Parameter 2 = pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: // NEO_RGB Pixels are wired for RGB bitstream // NEO_GRB Pixels are wired for GRB bitstream // NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels) // NEO_KHZ800 800 KHz bitstream (e.g. High Density LED // strip) Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, 6, NEO_GRB + NEO_KHZ800); Adafruit_LSM303_Accel_Unified accel = Adafruit_LSM303_Accel_Unified(54321); // Here is where you can put in your favorite colors that will // appear! Just add new {nnn, nnn, nnn}, lines. They will be // picked out randomly. // R G B uint8_t myFavoriteColors[][3] = {{200, 0, 200}, // purple {200, 0, 0}, // red {200, 200, 200}, // white }; // don't edit the line below #define FAVCOLORS sizeof(myFavoriteColors) / 3 // mess with this number to adjust TWINklitude :) // lower number = more sensitive #define MOVE_THRESHOLD 45 void setup() { Serial.begin(9600); // Try to initialise and warn if we couldn't detect the chip if (!accel.begin()) { Serial.println( "Oops ... unable to initialize the LSM303. Check your wiring!"); while (1); } strip.begin(); strip.show(); // Initialize all pixels to 'off' } void loop() { /* Get a new sensor event */ sensors_event_t event; accel.getEvent(&event); Serial.print("Accel X: "); Serial.print(event.acceleration.x); Serial.print(" "); Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print(" "); Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print(" "); // Get the magnitude (length) of the 3 axis vector // http://en.wikipedia.org/wiki/Euclidean_vector#Length double storedVector = event.acceleration.x*event.acceleration.x; storedVector += event.acceleration.y*event.acceleration.y; storedVector += event.acceleration.z*event.acceleration.z; storedVector = sqrt(storedVector); Serial.print("Len: "); Serial.println(storedVector); // wait a bit delay(100); // get new data! accel.getEvent(&event); double newVector = event.acceleration.x*event.acceleration.x; newVector += event.acceleration.y*event.acceleration.y; newVector += event.acceleration.z*event.acceleration.z; newVector = sqrt(newVector); Serial.print("New Len: "); Serial.println(newVector); // are we moving if (abs(newVector - storedVector) > MOVE_THRESHOLD) { Serial.println("Twinkle!"); flashRandom(5, 1); // first number is 'wait' delay, // shorter num == shorter twinkle flashRandom(5, 3); // second number is how many neopixels // to simultaneously light up flashRandom(5, 2); } } void flashRandom(int wait, uint8_t howmany) { for(uint16_t i=0; i= 0; x--) { int r = red * x; r /= 5; int g = green * x; g /= 5; int b = blue * x; b /= 5; strip.setPixelColor(j, strip.Color(r, g, b)); strip.show(); delay(wait); } } // LEDs will be off when done (they are faded to 0) }