#include <ESP32Servo.h>
#include <Adafruit_NeoPixel.h>


const int numFlowers = 18;

//LED Set up
const int bitLED = 7;
const int numLEDs = bitLED*numFlowers;
// #define LEDType WS2812B
const int brightness = 20;
const int ledPin = 15;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(numLEDs, ledPin, NEO_GRB + NEO_KHZ800);
// CRGB leds[numLEDs];
// int clockPin = 6;

//Servo Set up
int servoPins[numFlowers] = {32, 33, 25, 26, 27, 14, 12, 13, 2, 0, 4, 16, 17, 5, 18, 19, 21, 22};
Servo servos[numFlowers];
int servoOnTable[numFlowers];


void setup() {
  // put your setup code here, to run once:
  // Serial.begin(115200);
  // Serial.println("Hello, ESP32!");

  strip.begin();
  strip.show();
  // strip.setBrightness(brightness);

  // for(int i = 0; i<numFlowers;i++){
  //   servoOnTable[i] = 0;
  // }

  // //Attach all the servos + LEDs
  // for(int i = 0; i<numFlowers; i++){
  //   servos[i].attach(servoPins[i]);
  //   servos[i].write(0);
  //   // for(int j = 0; j<bitLED; j++){
  //   //   leds[i*bitLED+j] = CRGB::Red;
  //   // }
  // }
  
  // FastLED.show();
}

void loop() {
  colorWipe(strip.Color(255, 0, 0), 30);
  delay(200);
  colorWipe(strip.Color(0, 255, 0), 30);
  /*
  //Get input data
  while(!Serial.available());
  String input = Serial.readStringUntil('\n');

  //Split up input data to flower number and function

  String strNum = input.substring(0, 2);
  int num = strNum.toInt();
  String func = input.substring(2);

  //Check if num is in range
  if((num > (numFlowers-1)) || (num < 0)){
    Serial.write("Invalid Number");
  }
  else{
    //Change color and servo position based on input
    if(input.equals("happy")){
      leds[num][0] = CRGB(178, 223, 198);
      FastLED.show();
      servos[num].write(180);
    }
    else if(input.equals("content")){
      leds[num][0] = CRGB(254, 221, 196);
      FastLED.show();
      servos[num].write(180);
    }
    else if(input.equals("anxious")){
      leds[num][0] = CRGB(255, 171, 215);
      FastLED.show();
      servos[num].write(180);
    }
    else if(input.equals("sad")){
      leds[num][0] = CRGB(193, 239, 251);
      FastLED.show();
      servos[num].write(180);
    }
    else if(input.equals("irritable")){
      leds[num][0] = CRGB(255, 172, 174);
      FastLED.show();
      servos[num].write(180);
    }
    else if(input.equals("stressed")){
      leds[num][0] = CRGB::Red;
      FastLED.show();
      servos[num].write(180);
    }
    else if(input.equals("miserable")){
      leds[num][0] = CRGB(228, 199, 247);
      FastLED.show();
      servos[num].write(180);
    }

    //INCLUDE WAY TO CHECK IF FLOWER IS OPEN/CLOSE
    else if(input.equals("off")){
      leds[num][0] = CRGB::Black;
      FastLED.show();
      servos[num].write(0);
    }
  }
  */
}

void colorWipe(uint32_t c, uint8_t t){
  for(uint16_t i = 0; i<strip.numPixels(); i++){
    strip.setPixelColor(i, c);
    strip.show();
    delay(t);
  }
  strip.show();
}
$abcdeabcde151015202530354045505560fghijfghij
$abcdeabcde151015202530354045505560fghijfghij
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
ring1:GND
ring1:VCC
ring1:DIN
ring1:DOUT
ring2:GND
ring2:VCC
ring2:DIN
ring2:DOUT
ring3:GND
ring3:VCC
ring3:DIN
ring3:DOUT
ring4:GND
ring4:VCC
ring4:DIN
ring4:DOUT
ring5:GND
ring5:VCC
ring5:DIN
ring5:DOUT
ring6:GND
ring6:VCC
ring6:DIN
ring6:DOUT
ring7:GND
ring7:VCC
ring7:DIN
ring7:DOUT
ring8:GND
ring8:VCC
ring8:DIN
ring8:DOUT
ring9:GND
ring9:VCC
ring9:DIN
ring9:DOUT
ring10:GND
ring10:VCC
ring10:DIN
ring10:DOUT
ring11:GND
ring11:VCC
ring11:DIN
ring11:DOUT
ring12:GND
ring12:VCC
ring12:DIN
ring12:DOUT
ring13:GND
ring13:VCC
ring13:DIN
ring13:DOUT
ring14:GND
ring14:VCC
ring14:DIN
ring14:DOUT
ring15:GND
ring15:VCC
ring15:DIN
ring15:DOUT
ring16:GND
ring16:VCC
ring16:DIN
ring16:DOUT
ring17:GND
ring17:VCC
ring17:DIN
ring17:DOUT
ring18:GND
ring18:VCC
ring18:DIN
ring18:DOUT
servo1:GND
servo1:V+
servo1:PWM
servo2:GND
servo2:V+
servo2:PWM
servo3:GND
servo3:V+
servo3:PWM
servo4:GND
servo4:V+
servo4:PWM
servo5:GND
servo5:V+
servo5:PWM
servo6:GND
servo6:V+
servo6:PWM
servo7:GND
servo7:V+
servo7:PWM
servo8:GND
servo8:V+
servo8:PWM
servo9:GND
servo9:V+
servo9:PWM
servo10:GND
servo10:V+
servo10:PWM
servo11:GND
servo11:V+
servo11:PWM
servo12:GND
servo12:V+
servo12:PWM
servo13:GND
servo13:V+
servo13:PWM
servo14:GND
servo14:V+
servo14:PWM
servo15:GND
servo15:V+
servo15:PWM
servo16:GND
servo16:V+
servo16:PWM
servo17:GND
servo17:V+
servo17:PWM
servo18:GND
servo18:V+
servo18:PWM