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