[아두이노] 버튼 인터럽트 한번만 실행하기
[아두이노] 인터럽트 버튼 딜레이 처리하기
제목을 뭐라 적어야할지 모르겠는데, 아무튼 버튼을 콜백으로 인터럽트를 사용하면 채터링 현상에 의해 인터럽트가 여러~번 발생한다.
따라서, 버튼을 눌렀을때 인터럽트 함수가 한번만 실행되기 위해서 어느정도 최소단위 간격을 처리해야한다.
간단하게 아래와 같이 구현하며, 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; } }
최근 댓글