diff --git a/Flora_Sparkle_Skirt/README.md b/Flora_Sparkle_Skirt/README.md new file mode 100644 index 00000000..c36548b6 --- /dev/null +++ b/Flora_Sparkle_Skirt/README.md @@ -0,0 +1,4 @@ +# Flora Sparkle Skirt + +Code to accompany this tutorial: +https://learn.adafruit.com/sparkle-skirt/ diff --git a/Flora_Sparkle_Skirt/sparkle_skirt/sparkle_skirt.ino b/Flora_Sparkle_Skirt/sparkle_skirt/sparkle_skirt.ino new file mode 100644 index 00000000..674a13d9 --- /dev/null +++ b/Flora_Sparkle_Skirt/sparkle_skirt/sparkle_skirt.ino @@ -0,0 +1,116 @@ +#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) +}