#include <Adafruit_NeoPixel.h>

#define PIN 23      // On Trinket or Gemma, suggest changing this to 1
#define NUMPIXELS 8 // Popular NeoPixel ring size

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 500

void allPixelsOff();
void rotatingColors();
void colorWipe(uint32_t color, int wait);
void theaterChase(uint32_t color, int wait);

void setup()
{
    Serial.begin(115200);
    pixels.begin();
}

void loop()
{
    theaterChase(pixels.Color(209, 86, 203), 50);
    // while (Serial.available() > 0)
    // {
    //     String command = Serial.readStringUntil('\n');
    //     Serial.println(command);
    //     if (command == "off")
    //     {
    //         allPixelsOff();
    //     }
    //     else if (command == "rotating")
    //     {
    //         rotatingColors();
    //     }
    //     else if (command == "wipe")
    //     {
    //         colorWipe(pixels.Color(255, 0, 0), 50);
    //     }
    //     else if (command == "theater")
    //     {
    //         theaterChase(pixels.Color(0, 0, 255), 50);
    //     }
    // }
}

void allPixelsOff()
{
    pixels.clear();
    pixels.show();
}

void rotatingColors()
{
    for (int i = 0; i < NUMPIXELS; i++)
    {
        pixels.setPixelColor(i, pixels.Color(209, 86, 203));
        pixels.show();
        delay(DELAYVAL);
        pixels.setPixelColor(i, 0);
    }
}

void colorWipe(uint32_t color, int wait)
{
    for (int i = 0; i < NUMPIXELS; i++)
    {
        pixels.setPixelColor(i, color);
        pixels.show();
        delay(wait);
    }
}

void theaterChase(uint32_t color, int wait)
{
    for (int j = 0; j < 10; j++)
    {
        for (int q = 0; q < 3; q++)
        {
            for (int i = 0; i < NUMPIXELS; i = i + 3)
            {
                pixels.setPixelColor(i + q, color);
            }
            pixels.show();

            delay(wait);

            for (int i = 0; i < NUMPIXELS; i = i + 3)
            {
                pixels.setPixelColor(i + q, 0);
            }
        }
    }
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
rgb1:VDD
rgb1:DOUT
rgb1:VSS
rgb1:DIN
rgb2:VDD
rgb2:DOUT
rgb2:VSS
rgb2:DIN
rgb3:VDD
rgb3:DOUT
rgb3:VSS
rgb3:DIN
rgb4:VDD
rgb4:DOUT
rgb4:VSS
rgb4:DIN
rgb5:VDD
rgb5:DOUT
rgb5:VSS
rgb5:DIN
rgb6:VDD
rgb6:DOUT
rgb6:VSS
rgb6:DIN
rgb7:VDD
rgb7:DOUT
rgb7:VSS
rgb7:DIN
rgb8:VDD
rgb8:DOUT
rgb8:VSS
rgb8:DIN
rgb9:VDD
rgb9:DOUT
rgb9:VSS
rgb9:DIN
rgb10:VDD
rgb10:DOUT
rgb10:VSS
rgb10:DIN
rgb11:VDD
rgb11:DOUT
rgb11:VSS
rgb11:DIN
rgb12:VDD
rgb12:DOUT
rgb12:VSS
rgb12:DIN
rgb13:VDD
rgb13:DOUT
rgb13:VSS
rgb13:DIN
rgb14:VDD
rgb14:DOUT
rgb14:VSS
rgb14:DIN
rgb15:VDD
rgb15:DOUT
rgb15:VSS
rgb15:DIN
rgb16:VDD
rgb16:DOUT
rgb16:VSS
rgb16:DIN
rgb17:VDD
rgb17:DOUT
rgb17:VSS
rgb17:DIN
rgb18:VDD
rgb18:DOUT
rgb18:VSS
rgb18:DIN
rgb19:VDD
rgb19:DOUT
rgb19:VSS
rgb19:DIN
rgb20:VDD
rgb20:DOUT
rgb20:VSS
rgb20:DIN
rgb21:VDD
rgb21:DOUT
rgb21:VSS
rgb21:DIN
rgb22:VDD
rgb22:DOUT
rgb22:VSS
rgb22:DIN
rgb23:VDD
rgb23:DOUT
rgb23:VSS
rgb23:DIN
rgb24:VDD
rgb24:DOUT
rgb24:VSS
rgb24:DIN