#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);
}
}
}