//나
#include <TaskScheduler.h>
const int RED_TIME = 5000;
const int YELLOW_TIME = 3000;
const int YELLOW_1s_TIME= 1000;
const int GREEN_TIME = 3000;
const int GREEN_BLINK = 3000;
const int GREEN_BLINK_INTERVAL = 500;
const int WHITE_TIME = 3000;
const int WHITE_BLINK = 3000;
const int WHITE_BLINK_INTERVAL = 500;
bool redOE();
void redOD();
bool yellowOE();
void yellowOD();
bool yellow1sOE();
void yellow1sOD();
bool greenOE();
void greenOD();
bool greenBlinkOE();
void greenBlinkCB();
void greenBlinkOD();
bool whiteOE();
void whiteOD();
bool whiteBlinkOE();
void whiteBlinkCB();
void whiteBlinkOD();
Scheduler ts;
Task red(RED_TIME, TASK_ONCE, NULL, &ts, false, redOE, redOD);
Task yellow(YELLOW_TIME, TASK_ONCE, NULL, &ts, false, yellowOE, yellowOD);
Task yellow1s(YELLOW_1s_TIME, TASK_ONCE,NULL, &ts, false, yellow1sOE, yellow1sOD);
Task green(GREEN_TIME, TASK_ONCE, NULL, &ts, false, greenOE, greenOD);
Task greenBlink(500, 6, greenBlinkCB, &ts, false, greenBlinkOE, greenBlinkOD);
Task white(WHITE_TIME, TASK_ONCE, NULL, &ts, false, whiteOE, whiteOD);
Task whiteBlink(500, 6, whiteBlinkCB, &ts, false, whiteBlinkOE, whiteBlinkOD);
bool redToGreen = true;
void setup() {
pinMode(8, OUTPUT);
pinMode(11, OUTPUT);
pinMode(9, OUTPUT);
pinMode(13, OUTPUT);
red.restartDelayed();
}
void loop() {
ts.execute();
}
bool redOE() { //켜는 함수
digitalWrite(8, HIGH);
return true;
}
void redOD() { //끄는 함수
digitalWrite(8, LOW);
green.restartDelayed();
}
bool yellowOE() {
digitalWrite(11, HIGH);
return true;
}
void yellowOD() {
digitalWrite(11, LOW);
whiteBlink.restartDelayed();
}
bool yellow1sOE(){
digitalWrite(11,HIGH);
return true;
}
void yellow1sOD(){
digitalWrite(11,LOW);
red.restartDelayed();
}
bool greenOE() {
digitalWrite(9, HIGH);
return true;
}
void greenOD() {
digitalWrite(9, LOW);
greenBlink.restartDelayed();
white.restartDelayed();
yellow.restartDelayed();
}
bool greenState;
bool greenBlinkOE() {
digitalWrite(9, LOW);
greenState = false;
return true;
}
void greenBlinkCB() {
greenState = greenState ^ 1;
digitalWrite(9, greenState ? HIGH : LOW);
}
void greenBlinkOD() {
digitalWrite(9, LOW);
}
bool whiteOE() {
digitalWrite(13, HIGH);
return true;
}
void whiteOD() {
digitalWrite(13, LOW);
whiteBlink.restartDelayed();
}
bool whiteState;
bool whiteBlinkOE() {
digitalWrite(13, LOW);
whiteState = false;
return true;
}
void whiteBlinkCB() {
whiteState = whiteState ^ 1;
digitalWrite(13, whiteState ? HIGH : LOW);
}
void whiteBlinkOD() {
digitalWrite(13, LOW);
yellow1s.restartDelayed();
}