const int buttonPin = 12;
const int redLED = 6;
const int yellowLED = 5;
const int greenLED = 3;
double currentTime;
double startTimeRed;
double startTimeYellow;
double startTimeGreen;
double deltaTRed = 1;
double deltaTYellow = 1;
double deltaTGreen = 1;
void setup() {
// put your setup code here, to run once:
// Initialize serial communication
Serial.begin(9600);
// Set the button pin as input
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
// initialize timers
startTimeRed = millis();
startTimeRed = startTimeRed*.001;
startTimeYellow = millis();
startTimeYellow = startTimeYellow*.001;
startTimeGreen = millis();
startTimeGreen = startTimeGreen*.001;
Serial.println("Welcome.\n");
}
void loop() {
// put your main code here, to run repeatedly:
currentTime = millis();
currentTime = currentTime*.001;
getUserInput();
updateLEDs();
}
void getUserInput() {
if (Serial.available() > 0) {
String str = Serial.readString();
str.trim();
int commaIndex = str.indexOf(",");
String color = str.substring(0, commaIndex);
double deltaT = str.substring(commaIndex+1, str.length()-1).toDouble();
if (color == "R" || color == "r") {
deltaTRed = deltaT;
}
else if (color == "Y" || color == "y") {
deltaTYellow = deltaT;
}
else if (color == "G" || color == "g") {
deltaTGreen = deltaT;
}
}
}
void updateLEDs() {
if ((currentTime - startTimeRed) >= deltaTRed) {
if (digitalRead(redLED)) {
digitalWrite(redLED, LOW);
}
else {
digitalWrite(redLED, HIGH);
}
startTimeRed = millis();
startTimeRed = startTimeRed*.001;
}
if ((currentTime - startTimeYellow) >= deltaTYellow) {
if (digitalRead(yellowLED)) {
digitalWrite(yellowLED, LOW);
}
else {
digitalWrite(yellowLED, HIGH);
}
startTimeYellow = millis();
startTimeYellow = startTimeYellow*.001;
}
if ((currentTime - startTimeGreen) >= deltaTGreen) {
if (digitalRead(greenLED)) {
digitalWrite(greenLED, LOW);
}
else {
digitalWrite(greenLED, HIGH);
}
startTimeGreen = millis();
startTimeGreen = startTimeGreen*.001;
}
}