[ Button ]
button으로 검색해 보면 여러가지 라이브러리가 있습니다.
그 중에서 아래 그림처럼 OneButton 라이브러리를 추천합니다.
[ oneButtonTest.ino ]
E-01, E-02 의 스위치(버튼)의 핀 번호는 13 입니다.
#include <OneButton.h> // OneButton 라이브러리 포함
#define PIN_BUTTON 13 // 버튼 핀 번호 정의
OneButton button; // OneButton 객체 생성
// setup 함수: 프로그램이 시작될 때 한 번 실행
void setup()
{
Serial.begin(115200); // 시리얼 통신 초기화 (디버깅용 출력)
// 버튼 설정
// PIN_BUTTON: 버튼이 연결된 핀 번호
// INPUT_PULLUP: 내부 풀업 저항 활성화 (버튼 논리 반전)
// true: 버튼이 LOW일 때 눌린 것으로 처리
button.setup(PIN_BUTTON, INPUT_PULLUP, true);
// 디바운스 시간 설정
// 버튼이 눌렸을 때 발생하는 신호 떨림(채터링)을 무시하기 위한 시간 (default: 50ms)
button.setDebounceMs(40);
// 단일 클릭 감지 시간 설정
// 버튼이 눌렸다 떼어질 때 단일/더블 클릭으로 간주되는 최대 시간 (default:400ms)
button.setClickMs(300);
// 롱프레스 감지 시간 설정
// 버튼이 눌린 상태로 유지될 때 롱프레스로 간주되는 최소 시간 (default:800ms)
button.setPressMs(1000);
// 단일 클릭 이벤트 콜백 등록
// 버튼이 단일 클릭으로 인식되었을 때 oneClick 함수 호출
button.attachClick(oneClick);
// 더블클릭 이벤트 콜백 등록
// 버튼이 빠르게 두 번 클릭되었을 때 doubleClick 함수 호출
button.attachDoubleClick(doubleClick);
// 롱프레스 시작 이벤트 콜백 등록
// 버튼이 800ms 이상 눌렸을 때 longClick 함수 호출
button.attachLongPressStart(longClick);
}
// loop 함수: 프로그램이 실행되는 동안 반복
void loop()
{
// 버튼 상태를 지속적으로 확인하고 이벤트 처리
button.tick();
delay(10);
}
// 단일 클릭 이벤트 처리 함수
void oneClick()
{
Serial.println("One"); // 단일 클릭 감지 메시지 출력
}
// 더블클릭 이벤트 처리 함수
void doubleClick()
{
Serial.println("Double"); // 더블클릭 감지 메시지 출력
}
// 롱프레스 시작 이벤트 처리 함수
void longClick()
{
Serial.println("Long"); // 롱프레스 시작 메시지 출력
}
아래의 시간 설정 함수들을 호출하지 않아도 기본적으로 50ms, 400ms, 800ms 로 동작합니다.
이 시간을 변경하고 싶을 때만 호출하시면 됩니다.
// 디바운스 시간 설정
// 버튼이 눌렸을 때 발생하는 신호 떨림(채터링)을 무시하기 위한 시간 (default: 50ms)
button.setDebounceMs(40);
// 단일 클릭 감지 시간 설정
// 버튼이 눌렸다 떼어질 때 단일 클릭으로 간주되는 최대 시간 (default:400ms)
button.setClickMs(300);
// 롱프레스 감지 시간 설정
// 버튼이 눌린 상태로 유지될 때 롱프레스로 간주되는 최소 시간 (default:800ms)
button.setPressMs(1000);
댓글