#include <Adafruit_NeoPixel.h>
long randNumber;
int pos;
#define PIN 9
int spins = 6;
#define dir 1
// 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(16, PIN, NEO_GRB + NEO_KHZ800);
void setup()
{
randomSeed(analogRead(1 + 2 + 3 + 4 + 5));
strip.begin();
colorWipe(0,0); // Initialize all pixels to 'off'
strip.show();
} /***************end setup****************/
void loop()
{
randNumber = random(0,16); // Generate random number
roulette(strip.Color(250,0,0),strip.Color(0,0,250),strip.Color(0,250,0));
} /*****************END VOID*******************/
void roulette(uint32_t c, uint32_t d, uint32_t e)
{
float waitTime = 4.0; // long variable for adjustable dealy/wait time
// Full speed spins
for (int i = 0; i<16; i++)
{
advanceOne(c,d,e, waitTime);
}
// Slow spins & stop
for ( int i = 0; i <(16*6)+randNumber; i++)
{
advanceOne(c,d,e, waitTime);
waitTime = (waitTime * 1.046); // SLOWLY increase waitTime, and thus delay(), each time through the for loop
}
delay(100);
int winner = (pos +1);
if (winner>15) winner = 0;
uint32_t win = strip.getPixelColor(winner);
strip.setPixelColor(winner, (c+d+e));
strip.show();
delay(5000);
strip.setPixelColor(winner, win);
strip.show();
delay(200);
strip.setPixelColor(winner, (c+d+e));
strip.show();
delay(100);
strip.setPixelColor(winner, win);
strip.show();
delay(5000);
} /******************END ROULETTE*****************/
void blinkWinner()
{
uint32_t win = strip.getPixelColor(pos);
delay(100);
colorWipe(0,0);
strip.show();
delay(100);
strip.setPixelColor(pos, win);
strip.show();
delay(200);
colorWipe(0,0);
strip.show();
delay(100);
strip.setPixelColor(pos, win);
strip.show();
delay(200);
} /*****************END BlinkWinner ******************/
void advanceOne(uint32_t c, uint32_t d, uint32_t e, float wait)
{
colorWipe(0,0);
if ((pos & 0x01) == 0) // it's even
{
strip.setPixelColor(pos,c);
}
else // it's odd
{
strip.setPixelColor(pos,d);
}
if (pos == 0) strip.setPixelColor(pos,e); // or it's "0"
strip.show();
delay(wait);
if (dir)
{
pos--;
if(pos<0) pos=15;
}
else
{
pos++;
if(pos>15) pos=0;
}
} /*************** END AdvanceOne ********************/
// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
} /**************END colorWipe *********************/