BASIC4MCU | 질문게시판 | 아두이노
페이지 정보
작성자 GAWB 작성일2020-10-22 20:56 조회14,286회 댓글6건첨부파일
본문
LED 6개와 버튼 2개로 led가 순환하면서 버튼1을 누르면 순방향 버튼2를 누르면 반시계방향으로 동작하는 아두이노 코딩을 해야합니다.
코딩을 아래처럼 했는데 왜 첫번째 led만 깜빡깜빡 거릴까요?
//
int led[6]={ 3,5,6,9,10,11};
int button1=12,button2=13;
//
int n=0,dir=0;
//
void setup(){
for(int i=0; i<6; i++)pinMode(led[i],OUTPUT);
pinMode(button1,INPUT_PULLUP);
pinMode(button2,INPUT_PULLUP);
}
//
void loop(){
if(!digitalRead(button1))dir=1;
if(!digitalRead(button2))dir=0;
//
//
if(dir==0){
for(int n=0; n<=5; n++){
for(int i=0; i<=255; i++){ analogWrite(led[n],i); delay(5); }
for(int i=255; i>=0; i++){ analogWrite(led[n],i); delay(5); }
}
}
if(dir==1){
for(int n=5; n>=0; n++){
for(int i=0; i<=255; i++){ analogWrite(led[n],i); delay(5); }
for(int i=255; i>=0; i++){ analogWrite(led[n],i); delay(5); }
}
}
}
댓글 6
조회수 14,286master님의 댓글
master 작성일
for(int i=255; i>=0; i++){ 아래처럼 수정하세요
for(int i=255; i>=0; i--){
GAWB님의 댓글
GAWB
우선 답변해주셔서 감사합니다. 이제 반시계방향으로 잘 돌아가는데 왜 버튼이 안먹힐까요? 버튼으로 시계방향 반시계방향, 방향을 전환해야하는데 저기에서 무얼 수정해야하나요?
master님의 댓글
master
스위치 연결은 제대로 되었다고 가정하면
//
for(int i=0; i<=255; i++){ analogWrite(led[n],i); delay(5); }
5ms 딜레이를 256번 실행하면 1280ms가 걸립니다.
for문이 2개에
5번 루프를 돌리고 있으므로
12.8초 이상이 걸리게 됩니다.
스위치를 12.8초 이상 누르고 있든지, LED 동작이 끝나는 시점에 맞춰서 미리 스위치를 눌러야겠죠
master님의 댓글
master 작성일
int led[6]={ 3,5,6,9,10,11};
int button1=12,button2=13;
//
int n=0,dir=0;
//
void setup(){
for(int i=0; i<6; i++)pinMode(led[i],OUTPUT);
pinMode(button1,INPUT_PULLUP);
pinMode(button2,INPUT_PULLUP);
}
//
void loop(){
if(!digitalRead(button1))dir=1;
if(!digitalRead(button2))dir=0;
//
if(dir==0){
for(int n=0; n<=5; n++){
for(int i=0; i<=255; i++){ analogWrite(led[n],i); delay(5); if(!digitalRead(button1))return; }
for(int i=255; i>=0; i++){ analogWrite(led[n],i); delay(5); if(!digitalRead(button1))return; }
}
}
//
if(dir==1){
for(int n=5; n>=0; n++){
for(int i=0; i<=255; i++){ analogWrite(led[n],i); delay(5); if(!digitalRead(button2))return; }
for(int i=255; i>=0; i++){ analogWrite(led[n],i); delay(5); if(!digitalRead(button2))return; }
}
}
}
스위치를 누르면 즉각 반응하도록 수정했습니다.
GAWB님의 댓글
GAWB
//
int led[6]={ 3,5,6,9,10,11};
int button1=12;
int button2=13;
//
int n=0,dir=0;
//
void setup(){
for(int i=0; i<6; i++)
pinMode(led[i],OUTPUT);
pinMode(button1,INPUT_PULLUP);
pinMode(button2,INPUT_PULLUP);
}
//
void loop(){
if(!digitalRead(button1)) dir=1;
if(!digitalRead(button2)) dir=0;
//
//
if(dir==0){ // CW
for(int n=0; n<=5; n++){
for(int i=0; i<=255; i++){ analogWrite(led[n],i); delay(5); if(!digitalRead(button1))return;}
for(int i=255; i>=0; i--){ analogWrite(led[n],i); delay(5); if(!digitalRead(button1))return;}
}
analogWrite(led[0], 255);
analogWrite(led[1], 255);
analogWrite(led[2], 255);
analogWrite(led[3], 255);
analogWrite(led[4], 255);
analogWrite(led[5], 255);
delay(300);
analogWrite(led[0], 0);
analogWrite(led[1], 0);
analogWrite(led[2], 0);
analogWrite(led[3], 0);
analogWrite(led[4], 0);
analogWrite(led[5], 0);
}
if(dir==1){ // CCW
for(int n=5; n>=0; n++){
for(int i=0; i<=255; i++){ analogWrite(led[n],i); delay(5); if(!digitalRead(button2))return;}
for(int i=255; i>=0; i--){ analogWrite(led[n],i); delay(5); if(!digitalRead(button2))return;}
}
}
analogWrite(led[0], 255);
analogWrite(led[1], 255);
analogWrite(led[2], 255);
analogWrite(led[3], 255);
analogWrite(led[4], 255);
analogWrite(led[5], 255);
delay(300);
analogWrite(led[0], 0);
analogWrite(led[1], 0);
analogWrite(led[2], 0);
analogWrite(led[3], 0);
analogWrite(led[4], 0);
analogWrite(led[5], 0);
}
스위치를 12.8초동안 누르고있어야만 작동이 됩니다. 여기서 그냥 처음부터 누름없이 계속 시계방향으로 돌다가 스위치2를 누르면 반시계방향으로 전환 또 여기서 스위치1을 눌러 시계방향으로 전환 이렇게 하고싶습니다. 어느부분을 수정해야할까요?
점점 답에 가까워지는게 매우 희망적입니다. 조금만 더 도움을 주셨으면합니다.
(그리고 한바퀴를 다 돌경우에 전부 불이 들어왔다 꺼지는 효과를 원해서 제가 더 추가해봤습니다.)
master님의 댓글
master
이미 문제가 없도록 수정해드린 것 같은데요?
동작시켜보세요