전자 카운터 만들기

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);
    }
  }
}

댓글

이 블로그의 인기 게시물

EBIMU-9axis

CMAKE 문법

Gyro sensor