Hello people, I want to create a fuel gauge for my tractor using 2 x 8 Channel fully addressable WS2812B LED Strip
and a Fuel Sender Unit (basically a 190 ohms Variable Resistor)
I would like the NeoPixel LEDs to work in this sequence according to fuel level in the tank:
I have found this code on the web for a similar project:
//picmicrolab.com
//https://www.picmicrolab.com/rgb-led-bar-graph/
//Improved RGB LED Bar Graph for Arduino platform based on // WS2812 chip - Data In
//with 16 active segments
// strip.Color(0, 0, 0)); = Green
// strip.Color(255, 255, 0)); = Orange
// strip.Color(255, 0, 0)); = Red
#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 setup()
{
pinMode(A1, INPUT);
strip.begin();
}
void loop()
{
int analog_input = ( analogRead(A1) * 4.9 );
delay(100);
if(analog_input < 300 )
{
strip.setPixelColor(0, strip.Color(0, 127, 0));
for(int i=1;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
}
else if(analog_input > 300 && analog_input < 600 )
{
strip.setPixelColor(0, strip.Color(0, 127, 0));
strip.setPixelColor(1, strip.Color(0, 127, 0));
for(int i=2;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
}
else if(analog_input > 600 && analog_input < 900 )
{
for(int i=0;i<2;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=3;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
}
else if(analog_input > 900 && analog_input < 1200 )
{
for(int i=0;i<3;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=4;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
}
else if(analog_input > 1200 && analog_input < 1500 )
{
for(int i=0;i<4;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=5;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
}
else if(analog_input > 1500 && analog_input < 1800 )
{
for(int i=0;i<5;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=6;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
}
else if(analog_input > 1800 && analog_input < 2100 )
{
for(int i=0;i<6;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=7;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
}
else if(analog_input > 2100 && analog_input < 2400 )
{
for(int i=0;i<7;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=8;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
}
else if(analog_input > 2400 && analog_input < 2700 )
{
for(int i=0;i<8;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=9;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
}
else if(analog_input > 2700 && analog_input < 3000 )
{
for(int i=0;i<9;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=10;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
}
else if(analog_input > 3000 && analog_input < 3300 )
{
for(int i=0;i<10;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=11;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
}
else if(analog_input > 3300 && analog_input < 3600 )
{
for(int i=0;i<11;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=12;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.setPixelColor(10, strip.Color(255, 255, 0));
strip.show();
}
else if(analog_input > 3600 && analog_input < 3900 )
{
for(int i=0;i<12;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=13;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.setPixelColor(10, strip.Color(255, 255, 0));
strip.setPixelColor(11, strip.Color(255, 255, 0));
strip.show();
}
else if(analog_input > 3900 && analog_input < 4200 )
{
for(int i=0;i<13;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=14;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.setPixelColor(10, strip.Color(255, 255, 0));
strip.setPixelColor(11, strip.Color(255, 255, 0));
strip.setPixelColor(12, strip.Color(255, 255, 0));
strip.show();
}
else if(analog_input > 4200 && analog_input < 4500 )
{
for(int i=0;i<14;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=15;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.setPixelColor(10, strip.Color(255, 255, 0));
strip.setPixelColor(11, strip.Color(255, 255, 0));
strip.setPixelColor(12, strip.Color(255, 255, 0));
strip.setPixelColor(13, strip.Color(255, 0, 0));
strip.show();
}
else if(analog_input > 4500 && analog_input < 4800 )
{
for(int i=0;i<15;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=16;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.setPixelColor(10, strip.Color(255, 255, 0));
strip.setPixelColor(11, strip.Color(255, 255, 0));
strip.setPixelColor(12, strip.Color(255, 255, 0));
strip.setPixelColor(13, strip.Color(255, 0, 0));
strip.setPixelColor(14, strip.Color(255, 0, 0));
strip.show();
}
else if(analog_input > 4800 )
{
for(int i=0;i<16;i++)
strip.setPixelColor(i, strip.Color(0, 127, 0));
for(int i=16;i<Pixel_Number;i++)
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.setPixelColor(10, strip.Color(255, 255, 0));
strip.setPixelColor(11, strip.Color(255, 255, 0));
strip.setPixelColor(12, strip.Color(255, 255, 0));
strip.setPixelColor(13, strip.Color(255, 0, 0));
strip.setPixelColor(14, strip.Color(255, 0, 0));
strip.setPixelColor(15, strip.Color(255, 0, 0));
strip.show();
}
}
and have a created a wokwi project here : https://wokwi.com/projects/388458958731988993
This code is not doing exactly what I need, can anyone help me modify the code to achieve the LED sequence for the fuel gauge as on the picture above?
I am new to arduino.
Thanks