#include <Adafruit_NeoPixel.h>
#define PIN A0 // // WS2812 chip - Data In
#define Pixel_Number 16
Adafruit_NeoPixel strip = Adafruit_NeoPixel(Pixel_Number, PIN, NEO_GRB + NEO_KHZ800);
void updateStrip(int ledsToLight, uint32_t colorOn, uint32_t colorOff){
for(int x = 0; x < Pixel_Number; x++){
if(x < ledsToLight) {
strip.setPixelColor(x, colorOn);
} else {
strip.setPixelColor(x, colorOff);
}
}
strip.show();
}
struct Level {
int ledsToLight;
uint32_t color;
};
#define max_colors 3
Level colors[max_colors] = {
{3, strip.Color(255,0,0)},
{5, strip.Color(255,128,0)},
{16, strip.Color(0,255,0)},
};
uint32_t getColor(int ledsToLight){
uint32_t ret = strip.Color(0,0,255);
for(int x = 0; x < max_colors; x++){
if (ledsToLight <= colors[x].ledsToLight){
ret = colors[x].color;
break;
}
}
return ret;
}
void setup()
{
pinMode(A1, INPUT);
strip.begin();
Serial.begin(9600);
}
void loop()
{
int ledsToLight = 0;
int analog_input = ( analogRead(A1) * 4.9 );
// print out the value of the Fuel Sending Unit Position
Serial.println(analog_input);
delay(100); // delay in between reads for stability
if(analog_input < 300 ) {ledsToLight = 0;}
else if(analog_input > 300 && analog_input < 600 ) {ledsToLight = 1;}
else if(analog_input > 600 && analog_input < 900 ) {ledsToLight = 2;}
else if(analog_input > 900 && analog_input < 1200 ) {ledsToLight = 3;}
else if(analog_input > 1200 && analog_input < 1500 ) {ledsToLight = 4;}
else if(analog_input > 1500 && analog_input < 1800 ) {ledsToLight = 5;}
else if(analog_input > 1800 && analog_input < 2100 ) {ledsToLight = 6;}
else if(analog_input > 2100 && analog_input < 2400 ) {ledsToLight = 7;}
else if(analog_input > 2400 && analog_input < 2700 ) {ledsToLight = 8;}
else if(analog_input > 2700 && analog_input < 3000 ) {ledsToLight = 9;}
else if(analog_input > 3000 && analog_input < 3300 ) {ledsToLight = 10;}
else if(analog_input > 3300 && analog_input < 3600 ) {ledsToLight = 11;}
else if(analog_input > 3600 && analog_input < 3900 ) {ledsToLight = 12;}
else if(analog_input > 3900 && analog_input < 4200 ) {ledsToLight = 13;}
else if(analog_input > 4200 && analog_input < 4500 ) {ledsToLight = 14;}
else if(analog_input > 4500 && analog_input < 4800 ) {ledsToLight = 15;}
else if(analog_input > 4800 ) {ledsToLight = 16;}
if (ledsToLight == 0) {
doFlash();
} else {
auto colorOff = strip.Color(0,0,0);
auto colorOn = getColor(ledsToLight);
updateStrip(ledsToLight, colorOn, colorOff);
}
}
void doFlash(){
auto color = strip.Color(0,0,0);
if((millis() / 540) & 1 != 0){
color = strip.Color(255,0,0);
}
for (int x = 0; x < Pixel_Number; x++){
strip.setPixelColor(x, color);
}
strip.show();
}