#include <Adafruit_NeoPixel.h>
#define PIN_NEO_PIXEL 16 // The ESP32 pin GPIO16 connected to NeoPixel
#define NUM_PIXELS 200 // The number of LEDs (pixels) on NeoPixel LED strip
Adafruit_NeoPixel neopixel(NUM_PIXELS, PIN_NEO_PIXEL, NEO_GRB + NEO_KHZ800);
struct RGB
{
int red = 0;
int green = 0;
int blue = 0;
};
class LedStrip
{
public:
RGB stripColor[NUM_PIXELS];
int framerate = 60;
void frameDelay() {
static unsigned long lastFrame = millis();
int wantedDelay = 1000/framerate;
while (lastFrame < millis() - wantedDelay) {
delay(1);
}
lastFrame = millis();
}
void show()
{
for (int pixel = 0; pixel < NUM_PIXELS; ++pixel)
{
int color = neopixel.Color(stripColor[pixel].red, stripColor[pixel].green, stripColor[pixel].blue);
neopixel.setPixelColor(pixel, color);
}
neopixel.show();
//frameDelay();
}
void clearStrip()
{
for (int pixel = 0; pixel < NUM_PIXELS; pixel++)
{
stripColor[pixel].red = 0;
stripColor[pixel].green = 0;
stripColor[pixel].blue = 0;
}
}
void setPixelColor(int pixel, int r, int g, int b)
{
stripColor[pixel].red = r;
stripColor[pixel].green = g;
stripColor[pixel].blue = b;
}
void setColor(int r, int g, int b)
{
for (int pixel = 0; pixel < NUM_PIXELS; pixel++)
{
setPixelColor(pixel, r, g, b);
}
}
int fadeColor(int curColor, int targetColor, int fadeSpeed)
{
int newColor = curColor;
if (curColor < targetColor) {
newColor += fadeSpeed;
if (newColor > targetColor) {
newColor = targetColor;
}
}
else if (curColor > targetColor) {
newColor -= fadeSpeed;
if (newColor < targetColor) {
newColor = targetColor;
}
}
return newColor;
}
bool fadeStrip(int r, int g, int b, int speed=10)
{
static unsigned long lastFrame = millis();
unsigned long sinceLastFrameMS = millis() - lastFrame;
unsigned int fadeSpeed = ((speed) * sinceLastFrameMS) * 0.2;
//Serial.println(fadeSpeed);
if (fadeSpeed > 1000) {
fadeSpeed = 1000;
}
fadeSpeed = map(fadeSpeed, 0, 1000, 0, 255);
if (fadeSpeed) {
lastFrame = millis();
}
Serial.println(fadeSpeed);
bool returnVal = true;
for (int pixel = 0; pixel < NUM_PIXELS; pixel++)
{
stripColor[pixel].red = fadeColor(stripColor[pixel].red, r, fadeSpeed);
stripColor[pixel].green = fadeColor(stripColor[pixel].green, g, fadeSpeed);
stripColor[pixel].blue = fadeColor(stripColor[pixel].blue, b, fadeSpeed);
if (stripColor[pixel].red != r || stripColor[pixel].green != g || stripColor[pixel].blue != b) {
returnVal = false;
}
}
return returnVal;
}
};
LedStrip ledStrip;
void setup()
{
// put your setup code here, to run once:
Serial.begin(115200);
neopixel.begin();
neopixel.clear();
}
void loop()
{
while (!ledStrip.fadeStrip(255,0,0)) {
ledStrip.show();
}
while (!ledStrip.fadeStrip(0,255,0)) {
ledStrip.show();
}
while (!ledStrip.fadeStrip(0,0,255)) {
ledStrip.show();
}
}