[아두이노] 버튼 인터럽트 한번만 실행하기

[아두이노] 인터럽트 버튼 딜레이 처리하기

제목을 뭐라 적어야할지 모르겠는데, 아무튼 버튼을 콜백으로 인터럽트를 사용하면 채터링 현상에 의해 인터럽트가 여러~번 발생한다.

따라서, 버튼을 눌렀을때 인터럽트 함수가 한번만 실행되기 위해서 어느정도 최소단위 간격을 처리해야한다.

간단하게 아래와 같이 구현하며,  1초내에 눌린건 한번만 인터럽트가 처리되어 시리얼 출력이 발생하는 것을 확인할 수 있다.

const int duration = 1000;
unsigned long pre_time = 0;
unsigned long cur_time = 0;

void setup(){
   attachInterrupt(digitalPinToInterrupt(ButtonPin), pushButton, RISING);
}

void pushButton(){
  cur_time = millis();  
  if(cur_time - pre_time >= duration){    
    Serial.println("인터럽트 발생!!");
    pre_time = cur_time; 
  }
}

 

You may also like...

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.