#include <Adafruit_NeoPixel.h>
#define PIXEL_PIN 6 // NeoPixel data pin
#define NUM_PIXELS 64 // Change to match your ring/leds in the strip
#define AUDIO_PIN A0 // Slide pot input
Adafruit_NeoPixel ring(NUM_PIXELS, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
// ----- Adjustable Thresholds -----
float orangeStart = 0.1;
float redStart = 0.5;
void setup() {
ring.begin();
ring.show();
}
void loop() {
// ---- Smoothed Audio Read ----
static float smoothed = 0;
int raw = analogRead(AUDIO_PIN);
smoothed = (smoothed * 0.8) + (raw * 0.2);
int level = smoothed;
int ledsToLight = map(level, 0, 1023, 0, NUM_PIXELS);
for (int i = 0; i < NUM_PIXELS; i++) {
if (i < ledsToLight) {
float progress = (float)i / (NUM_PIXELS - 1);
uint32_t color = getLevelColor(progress);
ring.setPixelColor(i, color);
} else {
ring.setPixelColor(i, 0);
}
}
ring.show();
}
// ----- Colour Function With Adjustable Thresholds -----
uint32_t getLevelColor(float progress) {
uint8_t r = 0, g = 0, b = 0;
if (progress < orangeStart) {
// ----- Green -----
r = 0;
g = 255;
}
else if (progress < redStart) {
// ----- Green → Orange Blend -----
float p = (progress - orangeStart) / (redStart - orangeStart);
r = 255 * p;
g = 255;
}
else {
// ----- Orange → Red Blend -----
float p = (progress - redStart) / (1.0 - redStart);
r = 255;
g = 255 * (1.0 - p);
}
return ring.Color(r, g, b);
}