본문 바로가기
  • test
기본 예제/버튼 예제

[버튼 예제]

by ledmatrix 2025. 1. 7.

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

 

댓글