전자 카운터 만들기
int count = 0;
void setup(){
pinMode(7, INPUT_PULLUP);
pinMode(12, OUTPUT);
Serial.begin(9600);
}
void loop(){
int swState = digitalRead(7);
if(swState == LOW){
digitalWrite(12, HIGH);
count++;
}else{
digitalWrite(12, LOW);
}
Serial.println(count);
}
count를 0으로 설정하고 위와 같이 7,12 를 설정한다
이때 serial 통신을 위하여 void setup에 선언을 해주고
loop문에서 swState 값을 7번 핀에서 읽어 온다. 만약 swState가 LOW라면 불이 들어오고 count에 +1씩 숫자를 더해라 그렇지 않으면 그냥 불을 꺼라 라고 명령을 주고 통신을 보게 되면 1ms 마다 숫자가 올라가는 것을 볼 수 있다.
이러한 현상을 Bouncing 현상이라고 한다.
해결방법은 디 바운싱을 걸어주면 되는데,
int swState = LOW;
int lastSwState = LOW;
int ledState = LOW;
int count = 0;/*기본 선언*/
void setup(){
pinMode(7,INPUT_PULLUP);
pinMode(12,OUTPUT);
digitalWrite(12,ledState);/*핀모드 설정과 12번을 ledState로 설정*/
Serial.begin(9600);
}
void loop(){
swState = digitalRead(7);/*스위치의 상태는 7번핀에서 받아옴*/
if(swState != lastSwState){/*스위치 상태가 이전과 다르다면*/
delay(5);/*5ms동안 기다려라*/
swState = digitalRead(7);/*스위치 상태는 7번핀의 상태로 바꾼다*/
if(lastSwState == LOW && swState == HIGH){/*만약 이전의 스위치 상태가 LOW이고 지금 스위치 상태가 HIGH라면*/
digitalWrite(12, LOW);/*12번 핀은 LOW로 한다*/
}else{/*아니면*/
digitalWrite(12,HIGH);/*12번 핀을 HIGH로 한다*/
count++;/*그리고 카운트를 하나 올린다*/
Serial.println(count);
}
}
}
댓글
댓글 쓰기