BASIC4MCU | 질문게시판 | 아두이노 led pwm
페이지 정보
작성자 ppap 작성일2021-02-03 11:49 조회102,714회 댓글11건본문
기본적인 스위치로 눌러서 led를 켜고 끄고 인데요 led를 2~3개 더 달아서 물결효과를 내고 싶습니다.
스위치를 눌러 led1가 켜지기 시작하가 어느 밝기 시점에서 led2도 서서히 켜지면서 led1과 led2가 같이 켜집니다
정리하면 led1는 출발점이 0이라고 하면 led2는 출발점이 -50쯤이라고 생각하면 되는데 여기서 어떻게 수정을 해야하는지 잘 모르겠습니다
int led1 = 9,led2=10; int sw = 2; boolean bLedOn = false; boolean bSwOn = false; void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(sw, INPUT_PULLUP); digitalWrite(led1,LOW); digitalWrite(led2,LOW); } void loop() { if(digitalRead(sw) == LOW){ if(bSwOn == false){ bSwOn = true; if(bLedOn == false){ for(int fadeValue=0; fadeValue<=255; fadeValue+=5){ analogWrite(led1,fadeValue); analogWrite(led2,fadeValue); delay(10); } bLedOn = true; } else { for(int fadeValue=255; fadeValue>=0; fadeValue-=5){ analogWrite(led1,fadeValue); analogWrite(led2,fadeValue); delay(10); } bLedOn=false; } } }else{ bSwOn = false; } }
댓글 11
조회수 102,714master님의 댓글
master 작성일
https://cafe.naver.com/circuitsmanual/218037
위 글에서 댓글로 아래의 코드를 작성 해드렸는데요
돌려보시고 피드백을 적어보세요
int led1=9,led2=10,led3=11;
int sw=2;
//
bool bLedOn=false;
bool bSwOn=false;
int cnt=0;
//
void setup(){
pinMode(sw,INPUT_PULLUP);
pinMode(led1,OUTPUT); pinMode(led2,OUTPUT); pinMode(led3,OUTPUT);
digitalWrite(led1,LOW); digitalWrite(led2,LOW); digitalWrite(led3,LOW);
}
//
void loop(){
if(digitalRead(sw)==LOW){
if(bSwOn==false){ bSwOn=true; bLedOn^=1; if(cnt<0)cnt=0; if(cnt>455)cnt=455; }
}
else{ bSwOn=false; }
//----------------------------------
if(bLedOn){
if(cnt<=455){
if(cnt<=255)analogWrite(led1,cnt);
if(cnt>=100 && cnt<=355)analogWrite(led2,cnt-100);
if(cnt>=200)analogWrite(led3,cnt-200);
cnt++;
}
}
else{
if(cnt>=0){
if(cnt<=255)analogWrite(led1,cnt);
if(cnt>=100 && cnt<=355)analogWrite(led2,cnt-100);
if(cnt>=200)analogWrite(led3,cnt-200);
cnt--;
}
}
//----------------------------------
delay(10);
}
ppap님의 댓글
ppap
처음 누르면 첫번째 led1이 다 켜지고 led2가 켜지는데 그리고 꺼질때 한번에 꺼지게 해보고 싶습니다
master님의 댓글
master
1이 다 켜지고나서 2가 켜지는 것이 아니고 100, 200 차이가 난 채로 켜집니다만
(조도계로는 확실히 구분되지만) 눈으로는 잘 구별이 안됩니다.
else{
if(cnt){ cnt=0; analogWrite(led1,cnt); analogWrite(led2,cnt); analogWrite(led3,cnt); }
}
ppap님의 댓글
ppap
그럼 좀더 빨리 켜지는걸 볼려면 - 값을 줄이면 되는건가요??
master님의 댓글
master
코드를 작성 해드렸고, 어렵지 않은 코드이므로 공부한 후에 직접 원하는대로 수정해보세요
ppap님의 댓글
ppap
스위치를 눌러 동시에 pwm으로 꺼지게 해볼려고
if(cnt>=0){
if(cnt<=255)
analogWrite(led1,cnt);
analogWrite(led2,cnt);
analogWrite(led3,cnt);
cnt--;
}
이렇게 수정해봤는데 안꺼지네요
master님의 댓글
master 작성일
스위치 입력 코드 정도는 아셔야 할 것 같은데요?
if(digitalRead(sw)==LOW){
if(bSwOn==false){ bSwOn=true; bLedOn^=1; if(cnt<0)cnt=0; if(cnt>455)cnt=455; }
}
else{ bSwOn=false; }
이런 코드는 스위치를 오래 누르고 있어도 1회만 동작하는 엣지 검출 방식의 코드입니다.
master님의 댓글
master
cnt=0; analogWrite(led1,cnt); analogWrite(led2,cnt); analogWrite(led3,cnt); // off
ppap님의 댓글
ppap
아뇨 아뇨 알려주신건 한번에 led가 off 되는것 이고요 제가 할려는건
for(cnt=255; cnt>=0; cnt-=5){
analogWrite(led1,cnt);
analogWrite(led2,cnt);
analogWrite(led3,cnt);
delay(10);
}
} 이렇게 할려고 하는 것 입니다 근데 이렇게 하면 계속 깜빡 깜빡 거리기만 하네요
master님의 댓글
master 작성일
else{
if(cnt>255)cnt=255;
if(cnt>0){ analogWrite(led1,cnt); analogWrite(led2,cnt); analogWrite(led3,cnt); cnt-=5; }
}
//----------------------------------
delay(10);
}
ppap님의 댓글
ppap
감사합니다 좋은 공부가 되었습니다