택트스위치를 이용해 pwm 팬 단계 제어하기
페이지 정보
작성자 mjmj 작성일19-05-04 17:46 조회3,253회 댓글0건본문
우선 제가 만든 코딩은 다음과 같습니다.
void setup(){ Serial.begin(9600); pinMode(2, INPUT_PULLUP); pinMode(13,OUTPUT); } boolean sw=false; void loop() { int v=analogRead(A4); static int x=0; Serial.println(x%5); while (!chtsw(2)) { if (sw) { digitalWrite(13,LOW); x=x+1; Serial.println(x%5); while (x==0) { analogWrite(9,0); Serial.println(00); if (chtsw(2)==true) { break; } } while (x==4) { analogWrite(9,v/1023.0*255); Serial.println("eco"); delay(1000); if (chtsw(2)==true) { break; } } while (x==1) { analogWrite(9,105+50*x); Serial.println(105+50*x); delay(1000); if (chtsw(2)==true) { break; } } while (x==2) { analogWrite(9,105+50*x); Serial.println(105+50*x); delay(1000); if (chtsw(2)==true) { break; } } while (x==3) { analogWrite(9,105+50*x); Serial.println(105+50*x); delay(1000); if (chtsw(2)==true) { break; } } } else { digitalWrite(13,HIGH); x=x+1; Serial.println(x%5); while (x==0) { analogWrite(9,0); Serial.println(00); if (chtsw(2)==true) { break; } } while (x==4) { analogWrite(9,v/1023.0*255); Serial.println("eco"); delay(1000); if (chtsw(2)==true) { break; } } while (x==1) { analogWrite(9,105+50*x); Serial.println(105+50*x); delay(1000); if (chtsw(2)==true) { break; } } while (x==2) { analogWrite(9,105+50*x); Serial.println(105+50*x); delay(1000); if (chtsw(2)==true) { break; } } while (x==3) { analogWrite(9,105+50*x); Serial.println(105+50*x); delay(1000); if (chtsw(2)==true) { break; } } } sw=!sw; } while (chtsw(2));
}
boolean chtsw(byte dx) { boolean tsw=digitalRead(dx); while (tsw==digitalRead(dx)); delay(300); return !tsw; } |
제가 만드려고 하는 것은 다음과 같습니다.
0단계: 꺼짐 / 1~3단계: 약,중,강 /
4단계: eco모드 or 자동모드 (센서값을 읽어서 그에 대응하는 강도로 제어하는 모드)
택트스위치는 2번 핀에 연결하였고, pwm은 9번 핀에 연결하였습니다. A4번 핀에 연결한 것은 가변저항입니다. 나중에 센서로 대체 하려고 합니다.
택트스위치를 이용할 때 채터링을 고려하는 것은 책을 찾아보면서 해결했습니다. 채터링을 고려해서 led를 켜고, 끄는 것까진 되더라구요. 하지만 이걸 응용해서 여러 단계로 나눠서 택트스위치를 계속 누를 때마다 다음 단계로 넘어가게 하고싶은데 어떨 때는 다음 단계로 넘어가고 어떨 때는 안넘어가네요. 책에 나와있는대로 채터링을 고려한것 같은데 제가 사용한 while 명령어가 적절하지 않다던가 그런거 같습니다... 프로그래밍은 초보라서 여기서 몇시간째 막혀있네요. 도움을 부탁드립니다 ㅠㅠ
*** 코딩하다가 앞에 들여쓰기를 제맘대로 바꾼 부분이 있어서 이상하게 된 부분이 있을 수도 있습니다... 참고바랍니다.
댓글 : 0
조회수 : 3,253
등록된 댓글이 없습니다.