int ledState = LOW;
unsigned long ledStarted = 0;
const long interval = 4000;
int ledArray[3] {3, 5, 6};
int buttonPin = 2;

void setup() {
  pinMode(ledArray[0], OUTPUT);
  pinMode(ledArray[1], OUTPUT);
  pinMode(ledArray[2], OUTPUT);
  pinMode (buttonPin, INPUT);
  pinMode (LED_BUILTIN, OUTPUT); // To see if off delay works. Onboard led
  Serial.begin (9600);
}


void loop() {

  int button = digitalRead(buttonPin);
  unsigned long currentMillis = millis();


  if (button == HIGH) {
    ledState = HIGH;
    ledStarted = currentMillis;
    digitalWrite(LED_BUILTIN, ledState);
    // ledStarted = currentMillis;

  }

  if (currentMillis - ledStarted >= interval && button == LOW) {
    ledState = LOW;
    digitalWrite(LED_BUILTIN, ledState);
    analogWrite (ledArray[0], 0);
    analogWrite (ledArray[1], 0);
    analogWrite (ledArray[2], 0);
  }

  if (ledState == HIGH) {

    //0 to 255
    static unsigned long blinkMillis = ledStarted;
    unsigned long elapsedMillis = currentMillis - blinkMillis;
    //Serial.println(elapsedMillis);
    //for (int i = 0; i <= 255; i++) {
    if (elapsedMillis <= 255) {
      int i = elapsedMillis;
      analogWrite (ledArray[0], i);
      //delay (1);
    }

    //256 to 511
    //for (int i = 0; i <= 255; i++) {
    if (elapsedMillis >= 256 && elapsedMillis <= 511) {
      int i = elapsedMillis - 256;
      analogWrite (ledArray[1], i);
      //delay (1);
    }

    //512 to 767
    //for (int i = 0; i <= 255; i++) {
    if (elapsedMillis >= 512 && elapsedMillis <= 767) {
      int i = elapsedMillis - 512;
      analogWrite (ledArray[2], i);
      //delay (1);
    }

    //768 to 1968
    //for (int i = 0; i <= 2; i++) {
    if (elapsedMillis >= 768 && elapsedMillis <= 1968) {
      analogWrite (ledArray[0], 0);
      analogWrite (ledArray[1], 0);
      analogWrite (ledArray[2], 0);
      //delay (400);
    }

    if (elapsedMillis > 1968) {
      blinkMillis = millis();
    }



  }
}