#include <Adafruit_NeoPixel.h>
#define NUM_PIXELS 1
#define LEDPIN 2
#define SWITCHPIN 3 // pin for external switch to change modes
#define LED_TYPE NEOPIXEL
#define COLOR_ORDER GRB
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_PIXELS, LEDPIN, NEO_GRB + NEO_KHZ800);
unsigned int mode = 0;
volatile bool newMode = false; // flag to indicate a new mode was initiated from button interupt
int currentColor = 0;
float displayColor[3];
void setup() {
strip.begin();//initiates neopixels
strip.setBrightness(255);//sets overall brightness 0 - 255. lower = easier power
randomSeed(analogRead(2));
// start off with white
currentColor = 0;
displayColor[0] = 255;
displayColor[1] = 255;
displayColor[2] = 255;
}
void loop() {
//rainbow(10);
//flicker();
blink();
}
void showStrip() {
// NeoPixel
strip.show();
}
void setPixel(int Pixel, byte red, byte green, byte blue) {
strip.setPixelColor(Pixel, strip.Color(red, green, blue));
}
void setAll(byte red, byte green, byte blue) {
for(int i = 0; i < NUM_PIXELS; i++ ) {
setPixel(i, red, green, blue);
}
showStrip();
}
void blackOut() {
strip.clear();
strip.show();
}
void blink() {
setAll(255, 255, 255);
delay(500);
blackOut();
delay(500);
}
void flicker() {
float brt = 1.0;
while(!newMode) {
// 1 out of three chance we do not do full brightness
if (random(1,4) > 3) {
brt = (float)random(8, 10) / 10.0;
}
setAll(displayColor[0] * brt, displayColor[1] * brt, displayColor[2] * brt);
delay(random(500, 6000));
int rfl = random(2, 90);
for (int i = 0; i < rfl; i++) {
//int brt = random(50, 100);
//setAll(brt, brt, brt);
brt = (float)random(2, 4) / 10;
setAll(displayColor[0] * brt, displayColor[1] * brt, displayColor[2] * brt);
delay(random(20, 40));
blackOut();
}
if (random(5) < 2 ) {
brt = (float)random(3, 7) / 10.0;
setAll(displayColor[0] * brt, displayColor[1] * brt, displayColor[2] * brt);
delay(random(500, 5000));
}
if (random(5) < 2) {
blackOut();
delay(random(100, 700));
}
}
}
void rainbow(int wait) {
for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 144) {
strip.rainbow(firstPixelHue);
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment
}
}