flora sparkle skirt
This commit is contained in:
parent
21ee7d1a61
commit
137a38cdfa
2 changed files with 120 additions and 0 deletions
4
Flora_Sparkle_Skirt/README.md
Normal file
4
Flora_Sparkle_Skirt/README.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
# Flora Sparkle Skirt
|
||||
|
||||
Code to accompany this tutorial:
|
||||
https://learn.adafruit.com/sparkle-skirt/
|
||||
116
Flora_Sparkle_Skirt/sparkle_skirt/sparkle_skirt.ino
Normal file
116
Flora_Sparkle_Skirt/sparkle_skirt/sparkle_skirt.ino
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
#include <Wire.h>
|
||||
#include <Adafruit_Sensor.h>
|
||||
#include <Adafruit_LSM303_U.h>
|
||||
#include <Adafruit_NeoPixel.h>
|
||||
|
||||
// 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<howmany; i++) {
|
||||
// pick a random favorite color!
|
||||
int c = random(FAVCOLORS);
|
||||
int red = myFavoriteColors[c][0];
|
||||
int green = myFavoriteColors[c][1];
|
||||
int blue = myFavoriteColors[c][2];
|
||||
|
||||
// get a random pixel from the list
|
||||
int j = random(strip.numPixels());
|
||||
//Serial.print("Lighting up "); Serial.println(j);
|
||||
|
||||
// now we will 'fade' it in 5 steps
|
||||
for (int x=0; x < 5; x++) {
|
||||
int r = red * (x+1); r /= 5;
|
||||
int g = green * (x+1); g /= 5;
|
||||
int b = blue * (x+1); b /= 5;
|
||||
|
||||
strip.setPixelColor(j, strip.Color(r, g, b));
|
||||
strip.show();
|
||||
delay(wait);
|
||||
}
|
||||
// & fade out in 5 steps
|
||||
for (int x=5; x >= 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)
|
||||
}
|
||||
Loading…
Reference in a new issue