//입출력번호
int PB_1 = 2;
int PB_2 = 5;
int IR = 4;
int Led_R = 10;
int Led_G = 6;
int Led_Y = 8;
//플리커 작용
int flickerCount = 0;
bool Relay = false;
bool R_G = true;
unsigned long start = 0;
const long endnumber = 200;
//오토전환 작용
bool Relay_Y = false;
bool auto_ = true;
bool PB_1_IR = false;
bool lastIRState = HIGH;
void setup() {
pinMode(PB_1, INPUT);
pinMode(PB_2, INPUT);
pinMode(IR, INPUT);
pinMode(Led_R, OUTPUT);
pinMode(Led_G, OUTPUT);
pinMode(Led_Y, OUTPUT);
}
void loop() {
//수동조작
if (!auto_ && digitalRead (PB_1) == HIGH && !Relay){
PB_1_IR = true;
}
//센서조작
int currentIR = digitalRead(IR);
if (auto_ && currentIR == LOW && lastIRState == HIGH && !Relay){
PB_1_IR = true;
}
lastIRState = currentIR;
//플리커 시작조건
if (PB_1_IR && !Relay){
Relay = true;
PB_1_IR = false;
flickerCount = 0;
}
//플리커작동
if (Relay){
unsigned long Millis = millis();
if (Millis - start >= endnumber) {
start = Millis;
if (R_G) {
digitalWrite(Led_R, HIGH);
digitalWrite(Led_G, LOW);
} else {
digitalWrite(Led_G, HIGH);
digitalWrite(Led_R, LOW);
flickerCount++;
}
//플리커종료
R_G = !R_G;
if (flickerCount >= 5) {
Relay = false;
digitalWrite(Led_R, LOW);
digitalWrite(Led_G, LOW);
}
}
}
//수동조작전환
if (digitalRead(PB_1) == HIGH){
Relay_Y = false;
}
//센서조작전환
if (digitalRead(PB_2) == HIGH){
Relay_Y = true;
}
//센서-수동상태표시
if (Relay_Y){
auto_ = true;
digitalWrite(Led_Y, HIGH);
}
else {
auto_ = false;
digitalWrite(Led_Y, LOW);
}
}
센서 켜보니까 재미있네
댓글 0