#include  <Chrono.h>

#define led1 2
#define led2 3
#define led3 4
#define led4 5
#define led5 6

#define btn1 8
#define btn2 9
#define btn3 10
#define btn4 11

Chrono chronoled;
Chrono chronobtn;

int leds[5] = {led1, led2, led3, led4, led5};
int ledpointer = 0;
bool l2r = true;
bool ledstop = false;
bool btnstate;
bool lastbtnstate[4] = {HIGH, HIGH, HIGH, HIGH};

int basetime = 1000;
int ldtime = 0;
int ddelay = 50;

void setup() {
  // put your setup code here, to run once:
  chronobtn.stop();
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);

  pinMode(btn1, INPUT_PULLUP);
  pinMode(btn2, INPUT_PULLUP);
  pinMode(btn3, INPUT_PULLUP);
  pinMode(btn4, INPUT_PULLUP);

  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  bool btn1read = digitalRead(btn1);
  bool btn2read = digitalRead(btn2);
  bool btn3read = digitalRead(btn3);
  bool btn4read = digitalRead(btn4);

  //reverse
  if (btn1read != lastbtnstate[0]) {
    btn1read = lastbtnstate;
    if (btnstate == LOW && chronobtn.hasPassed(10)) {
      l2r = !l2r;
    }
    chronobtn.restart();
  }

  //Speed Up
  if (btn2read != lastbtnstate[1]) {
    btn2read = lastbtnstate;
    if (btnstate == LOW && chronobtn.hasPassed(10)) {
      basetime -= 100;
      if (basetime < 0) {
        basetime = 1000;
      }
      Serial.println(basetime);
    }
    chronobtn.restart();
  }

  //Slow down
  if (btn3read != lastbtnstate[2]) {
    btn3read = lastbtnstate;
    if (btnstate == LOW && chronobtn.hasPassed(10)) {
      basetime += 100;
      if (basetime > 3500) {
        basetime = 1000;
      }
      Serial.println(basetime);
    }
    chronobtn.restart();
  }

  //freeze
  if (btn4read != lastbtnstate[3]) {
    btn4read = lastbtnstate;
    if (btnstate == LOW && chronobtn.hasPassed(10)) {
      if (ledstop) {
        chronoled.resume();
        ledstop = false;
      } else {
        chronoled.stop();
        ledstop = true;
      }
      Serial.println("4");
    }
    chronobtn.restart();
  }




  //LED time & reverse opration
  if (chronoled.hasPassed(basetime, true)) {
    if (l2r) {
      Serial.print("Now  ");
      Serial.println(ledpointer);
      if (ledpointer < 5) {
        // ledpointer = 0;
        if(ledpointer != 0){
        digitalWrite(leds[ledpointer - 1], LOW);
        }
        digitalWrite(leds[ledpointer], HIGH);
        ledpointer++;
        Serial.print("next  ");
      Serial.println(ledpointer);
      }
      else {
        ledpointer = 0;
        digitalWrite(leds[ledpointer], LOW);
        
      }
    } else {
      if (ledpointer < 0) {
        ledpointer = 5;
      }
      ledpointer--;
      digitalWrite(leds[ledpointer + 1], LOW);
      digitalWrite(leds[ledpointer], HIGH);
    }
  }
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
led5:A
led5:C
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
r5:1
r5:2
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r