BASIC4MCU | 질문게시판 | 아두이노 버튼 led제어
페이지 정보
작성자 아두이노배우기 작성일2022-11-28 13:42 조회1,941회 댓글1건본문
버튼 A,B 두개가 있습니다.
LED A,B 두개가 있습니다.
제어하는 것은
버튼 A를 누르면 LED A와 B가 2초동안 켜지고 4초등안 꺼지는 것을 반복하는 것입니다.
버튼 A를 다시 누르면 완전히 꺼집니다.
버튼 B를 누르면 LED B만 켜지고
버튼 B를 다시 누르면 LED B만 꺼집니다.
일단 버튼 A를 누르면 LED A와B가 작동하는 소스입니다. 문제는 버튼을 누르면 딜레이4초가 먼저 발생해서 4초 후에 켜집니다.
char flag=0,mode=0;
int BUTTON_A=3;
const int ledPin = 5;
const int ledPin2 = 6;
int ledState = LOW;
unsigned long previousMillis = 0;
const long offTime = 4000;
const long onTime = 2000;void setup() {
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
pinMode(3,INPUT_PULLUP);
Serial.begin(9600);
}void loop() {
unsigned long currentMillis = millis();
if(digitalRead(3)){
if(flag==0){ flag=1; if(++mode>1)mode=0; delay(50); }
}
else{
if(flag){ flag=0; delay(50); } delay(50);
}
switch(mode){
case 0:
if (currentMillis - previousMillis >= onTime && ledState) {
previousMillis = currentMillis;
ledState = LOW;
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
}
else if(currentMillis - previousMillis >= offTime && !ledState) {
previousMillis = currentMillis;
ledState = HIGH;
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}
break;
case 1:
digitalWrite(5,HIGH); digitalWrite(6,HIGH);
break;
}
}
댓글 1
조회수 1,941master님의 댓글
master 작성일
switch(mode){
case 0:
if(currentMillis - previousMillis <= onTime){ digitalWrite(5, LOW); digitalWrite(6, LOW); }
else{ digitalWrite(5, HIGH); digitalWrite(6, HIGH); }
if(currentMillis - previousMillis >= offTime){ previousMillis = currentMillis; }
break;
case 1: digitalWrite(5,HIGH); digitalWrite(6,HIGH); break;
}
}