[아두이노] 푸시버튼 상태변화 감지 (에지 검출)
푸시버튼(스위치) 상태변화(State Change/Edge Detection) 감지
간혹 버튼이 몇 번 눌려졌는지 카운트 해야하는 경우가 있습니다. 버튼이 언제 OFF=>ON으로 상태가 변화하는 시점에 카운트를 증가시키면 될 것입니다. 예로써 버튼이 4번 눌려지면 LED를 ON하는 프로그램을 작성해 보겠습니다.
우선 아두이노 보드와 스위치 10KΩ 저항을 이용하여 아래와 같이 풀다운 회로를 구성합니다.
코드는 아래와 같습니다.
const int buttonPin = 2; // 푸시버튼 스위치가 연결된 핀번호
const int ledPin = 13; // 내장 LED 핀번호
int buttonPushCounter = 0; // 스위치가 눌려진 횟수를 기록
int buttonState = 0; // 스위치의 현재 상태
int lastButtonState = 0; // 스위치의 이전 상태
void setup() {
// 스위치 연결된 입력핀 설정
pinMode(buttonPin, INPUT);
// LED 연결된 출력핀 설정
pinMode(ledPin, OUTPUT);
// 확인용 시리얼 모니터 구동
Serial.begin(9600);
}
void loop() {
// 스위치의 현재값 읽기
buttonState = digitalRead(buttonPin);
// 스위치의 이전 상태값과 비교
if (buttonState != lastButtonState) {
// 이전 상태와 다르고 스위치가 눌려진 상태면 카운터를 1 증가
if (buttonState == HIGH) {
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
} else {
Serial.println("off");
}
// 스위치 디바운싱(Debouncing) 용도로 딜레이
delay(50);
}
// 스위치의 현재 상태를 이전 상태로 저장
lastButtonState = buttonState;
// 카운터가 4의 배수에 도달했는지 확인해서 내장 LED 점등
if (buttonPushCounter % 4 == 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
코드 아래쪽에 스위치의 디바운스(Debouncing) 용도로 사용되었으며 좀 더 자세한 사항은 아래 링크를 참조 바랍니다.
끝.
댓글
댓글 쓰기