I couldn't come up with a more descriptive title of what I'm trying to do. I have a 24 LED neopixel ring. I'm trying to light the LED's such that they represent values from 0 to 99. I'm just writing some basic code to get the idea across.
At the most basic level this works...
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
while(!Serial);
Serial.println("Begin");
for (int i = 0; i<100; i++){
int pixel = map(i, 0, 99, 0, 23);
Serial.print("input=");
Serial.print(i);
Serial.print(" pixel=");
Serial.println(pixel);
}
}
void loop() {
// put your main code here, to run repeatedly:
}
The code above will tell me which pixel to light based on values from 0 to 99. With this I can only light a single pixel to represent the value of the input. What I'm trying to accomplish is to proportionally light two of the LED's to represent the values in between. If this ring had 25 LED's instead of 24 this is a fairly easy solution. If it had 25 LED's then the map value would always be a multiple of 4. For instance, if the input was 0 pixel 0 is 100% lit and pixel 1 is 0% lit. If the input was 1 pixel 0 would be 75% lit and pixel one would be 25% lit. And so on around the ring.
With 24 pixels however it gets more complicated because as the input goes from 0 to 99 there will be 4 occasions where the mapped value will be 5 instead of 4. In those instances I need the brightness value in 20% increments. I hope I'm explaining this well enough that it makes sense. Below is code I wrote that would work if this thing had 25 LED's
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
while(!Serial);
Serial.println("Begin");
for (int i = 0; i<100; i++){
int pixel = map(i, 0, 99, 0, 23);
Serial.print("input=");
Serial.print(i);
Serial.print(" pixel=");
Serial.println(pixel);
}
}
void loop() {
// put your main code here, to run repeatedly:
}
If I print the serial output the brightness values are represented as 0 to 3 but in 4 of those instances I need it to be from 0 to 4.
test
input=0 pixel=0 pixelBrightness=3 nextPixel=1 nextPixelBrightness=0
input=1 pixel=0 pixelBrightness=2 nextPixel=1 nextPixelBrightness=1
input=2 pixel=0 pixelBrightness=1 nextPixel=1 nextPixelBrightness=2
input=3 pixel=0 pixelBrightness=0 nextPixel=1 nextPixelBrightness=3
input=4 pixel=0 pixelBrightness=3 nextPixel=1 nextPixelBrightness=0
input=5 pixel=1 pixelBrightness=2 nextPixel=2 nextPixelBrightness=1
input=6 pixel=1 pixelBrightness=1 nextPixel=2 nextPixelBrightness=2
input=7 pixel=1 pixelBrightness=0 nextPixel=2 nextPixelBrightness=3
input=8 pixel=1 pixelBrightness=3 nextPixel=2 nextPixelBrightness=0
input=9 pixel=2 pixelBrightness=2 nextPixel=3 nextPixelBrightness=1
input=10 pixel=2 pixelBrightness=1 nextPixel=3 nextPixelBrightness=2
input=11 pixel=2 pixelBrightness=0 nextPixel=3 nextPixelBrightness=3
input=12 pixel=2 pixelBrightness=3 nextPixel=3 nextPixelBrightness=0
input=13 pixel=3 pixelBrightness=2 nextPixel=4 nextPixelBrightness=1
input=14 pixel=3 pixelBrightness=1 nextPixel=4 nextPixelBrightness=2
input=15 pixel=3 pixelBrightness=0 nextPixel=4 nextPixelBrightness=3
input=16 pixel=3 pixelBrightness=3 nextPixel=4 nextPixelBrightness=0
input=17 pixel=3 pixelBrightness=2 nextPixel=4 nextPixelBrightness=1
input=18 pixel=4 pixelBrightness=1 nextPixel=5 nextPixelBrightness=2
input=19 pixel=4 pixelBrightness=0 nextPixel=5 nextPixelBrightness=3
input=20 pixel=4 pixelBrightness=3 nextPixel=5 nextPixelBrightness=0
input=21 pixel=4 pixelBrightness=2 nextPixel=5 nextPixelBrightness=1
input=22 pixel=5 pixelBrightness=1 nextPixel=6 nextPixelBrightness=2
input=23 pixel=5 pixelBrightness=0 nextPixel=6 nextPixelBrightness=3
input=24 pixel=5 pixelBrightness=3 nextPixel=6 nextPixelBrightness=0
input=25 pixel=5 pixelBrightness=2 nextPixel=6 nextPixelBrightness=1
input=26 pixel=6 pixelBrightness=1 nextPixel=7 nextPixelBrightness=2
input=27 pixel=6 pixelBrightness=0 nextPixel=7 nextPixelBrightness=3
input=28 pixel=6 pixelBrightness=3 nextPixel=7 nextPixelBrightness=0
input=29 pixel=6 pixelBrightness=2 nextPixel=7 nextPixelBrightness=1
input=30 pixel=6 pixelBrightness=1 nextPixel=7 nextPixelBrightness=2
input=31 pixel=7 pixelBrightness=0 nextPixel=8 nextPixelBrightness=3
input=32 pixel=7 pixelBrightness=3 nextPixel=8 nextPixelBrightness=0
input=33 pixel=7 pixelBrightness=2 nextPixel=8 nextPixelBrightness=1
input=34 pixel=7 pixelBrightness=1 nextPixel=8 nextPixelBrightness=2
input=35 pixel=8 pixelBrightness=0 nextPixel=9 nextPixelBrightness=3
input=36 pixel=8 pixelBrightness=3 nextPixel=9 nextPixelBrightness=0
input=37 pixel=8 pixelBrightness=2 nextPixel=9 nextPixelBrightness=1
input=38 pixel=8 pixelBrightness=1 nextPixel=9 nextPixelBrightness=2
Hopefully this shows the problem.