#include <TaskScheduler.h>
#define Blink 15000
#define Delay 3000
#define Delay2 5000
#define Delay3 500
#define Green 9
#define Yellow 11
#define Red 8
#define White 13
void LED_YR();
void LED_RG();
void LED_GYW();
void LED_G();
void LED_GY();
void LED_W();
void LED_WY();
Scheduler runner;
Task t1(Blink,TASK_FOREVER,&LED_YR);
Task t2(Blink,TASK_FOREVER,&LED_RG);
Task t3(Blink,TASK_FOREVER,&LED_GYW);
Task t4(Delay3,TASK_FOREVER,&LED_G);
Task t5(Delay3,TASK_FOREVER,&LED_W);
Task t6(Blink,TASK_FOREVER,&LED_GY);
Task t7(Blink,TASK_FOREVER,&LED_WY);
//빨간색은 15초마다 켜지고
//5초후에 꺼짐
//초록은 빨강이 꺼진후 바로 켜지고 3초후 꺼짐
//노랑은 초록이 꺼진후 켜지고 3초유지
//이때 초록은 깜빡거림 3초간 0.5초 깜빡임
//하얀색은 노란색과 같이 켜졌다 꺼짐
//하지만 노란색이 꺼진후 바로 안꺼지고 3초간 깜빡임
//하얀색이 완전이 꺼지면 노란색이 1초간 켜짐
//이후 반복
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(White,OUTPUT);//하얀색
pinMode(Red,OUTPUT);//빨간색
pinMode(Yellow,OUTPUT);//노란색
pinMode(Green,OUTPUT);//초록색
runner.init();
runner.addTask(t1);
runner.addTask(t2);
runner.addTask(t3);
runner.addTask(t4);
runner.addTask(t5);
runner.addTask(t6);
runner.addTask(t7);
t1.enable();
t2.enableDelayed(Delay2);
t3.enableDelayed(Delay2+Delay);
t6.enableDelayed(Delay2+Delay+Delay);
t7.enableDelayed(Delay2+Delay+Delay+Delay);
}
void loop() {
// put your main code here, to run repeatedly:
runner.execute();
}
void LED_YR(){
digitalWrite(Yellow,LOW);
Serial.println("빨간불이 켜졌습니다. 멈추세요!");
digitalWrite(Red,HIGH);
}
void LED_RG(){
digitalWrite(Red,LOW);
Serial.println("초록불이 켜졌습니다. 안전하게 지나가세요");
digitalWrite(Green,HIGH);
}
void LED_G(){
static bool Gstate = false;
digitalWrite(Green,Gstate);
Gstate = Gstate^1;
}
void LED_W(){
static bool Wstate = false;
digitalWrite(White,Wstate);
Wstate = Wstate^1;
}
void LED_GYW(){
digitalWrite(Green,LOW);
Serial.println("노란불이 켜졌습니다 조심히 지나가세요");
digitalWrite(Yellow,HIGH);
Serial.println("하얀불이 켜졌습니다 좌회전이 가능해요!");
digitalWrite(White,HIGH);
Serial.println("깜빡깜빡");
t4.enable();
}
void LED_GY(){
digitalWrite(Yellow,LOW);
digitalWrite(White,LOW);
t4.disable();
digitalWrite(Green,LOW);
Serial.println("깜빡깜빡");
t5.enable();
}
void LED_WY(){
t5.disable();
digitalWrite(White,LOW);
Serial.println("노란불이 켜졌습니다 조심히 지나가세요");
digitalWrite(Yellow,HIGH);
}