/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-button-long-press-short-press */#define BUTTON_PIN D7 // ESP8266 핀이 버튼에 연결됨#define SHORT_PRESS_TIME 500 // 500 밀리초int prev_button_state = LOW; // 입력 핀의 이전 상태int button_state; // 입력 핀에서의 현재 읽기 값unsignedlong time_pressed = 0;unsignedlong time_released = 0;voidsetup() {Serial.begin(9600);pinMode(BUTTON_PIN, INPUT_PULLUP);}voidloop() {// 스위치/버튼의 상태를 읽습니다: button_state = digitalRead(BUTTON_PIN);if (prev_button_state == HIGH && button_state == LOW) // 버튼이 눌림 time_pressed = millis();elseif (prev_button_state == LOW && button_state == HIGH) { // 버튼이 릴리즈됨 time_released = millis();long press_duration = time_released - time_pressed;if ( press_duration < SHORT_PRESS_TIME )Serial.println("짧은 누름이 감지됨"); }// 마지막 상태를 저장 prev_button_state = button_state;}
올바른 ESP8266 보드를 선택하세요(예: NodeMCU 1.0 (ESP-12E Module)) 및 해당 COM 포트를 선택하세요.
Arduino IDE를 사용하여 코드를 ESP8266에 업로드하세요.
버튼을 짧은 시간 동안 여러 번 누르세요.
시리얼 모니터에서 출력을 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
A short press is detected
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2
※ 주의:
시리얼 모니터는 단일 클릭에 대해 여러 번의 짧은 클릭 감지를 표시할 수 있습니다. 이는 버튼의 예상되는 동작이며 "채터링 현상"이라고 합니다. 이 문제는 이 튜토리얼의 마지막 부분에서 다룰 예정입니다.
긴 누름 감지하는 방법
길게 누르기를 감지할 수 있는 두 가지 시나리오가 있습니다:
버튼을 놓으면 롱 프레스 이벤트가 식별됩니다.
버튼을 누르고 있는 동안, 그것이 놓여지기 전에도 롱 프레스 이벤트가 인식됩니다.
1. 첫 번째 경우에, 우리는 눌린 상태와 놓인 상태 사이의 시간 간격을 계산합니다. 2. 만약 기간이 미리 정한 시간보다 길면, 롱 프레스 이벤트가 식별됩니다.
두 번째 사용 사례에서 버튼을 누르면 누른 시간이 계속 측정되고 버튼을 놓을 때까지 길게 누르기 이벤트가 확인됩니다. 버튼을 계속 누르고 있는 동안 지속 시간이 사전에 정해진 시간보다 길면 길게 누르기 이벤트가 감지됩니다.
ESP8266 코드로 긴 누르기가 릴리스될 때 감지하기
/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-button-long-press-short-press */#define BUTTON_PIN D7 // ESP8266 핀이 버튼에 연결됨#define LONG_PRESS_TIME 1000 // 1000 밀리초int prev_button_state = LOW; // 입력 핀에서의 이전 상태int button_state; // 입력 핀에서의 현재 읽기unsignedlong time_pressed = 0;unsignedlong time_released = 0;voidsetup() {Serial.begin(9600);pinMode(BUTTON_PIN, INPUT_PULLUP);}voidloop() {// 스위치/버튼의 상태를 읽습니다: button_state = digitalRead(BUTTON_PIN);if(prev_button_state == HIGH && button_state == LOW) // 버튼이 눌림 time_pressed = millis();elseif(prev_button_state == LOW && button_state == HIGH) { // 버튼이 해제됨 time_released = millis();long press_duration = time_released - time_pressed;if( press_duration > LONG_PRESS_TIME )Serial.println("A long press is detected"); }// 마지막 상태를 저장함 prev_button_state = button_state;}
/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-button-long-press-short-press */#include <ezButton.h>#define SHORT_PRESS_TIME 1000 // 1000 밀리초#define LONG_PRESS_TIME 1000 // 1000 밀리초ezButtonbutton(D7); // D7 핀을 위한 ezButton 객체 생성unsignedlong time_pressed = 0;unsignedlong time_released = 0;bool is_pressing = false;bool is_long_detected = false;voidsetup() {Serial.begin(9600);button.setDebounceTime(50); // 디바운스 시간을 50 밀리초로 설정}voidloop() {button.loop(); // 반드시 loop() 함수를 먼저 호출해야 함if (button.isPressed()) { time_pressed = millis(); is_pressing = true; is_long_detected = false; }if (button.isReleased()) { is_pressing = false; time_released = millis();long press_duration = time_released - time_pressed;if ( press_duration < SHORT_PRESS_TIME )Serial.println("A short press is detected"); }if (is_pressing == true && is_long_detected == false) {long press_duration = millis() - time_pressed;if ( press_duration > LONG_PRESS_TIME ) {Serial.println("A long press is detected"); is_long_detected = true; } }}
사용 방법
다이어그램에 표시된 대로 구성 요소를 연결하십시오.
USB 케이블을 사용하여 ESP8266 보드를 컴퓨터에 연결하십시오.
컴퓨터에서 Arduino IDE를 엽니다.
올바른 ESP8266 보드를 선택하십시오. 예를 들어, (NodeMCU 1.0 (ESP-12E Module))와 해당 COM 포트를 선택하십시오.
ezButton 라이브러리를 설치하십시오. 설치 방법에 대해서는 How To를 참조하십시오.
Arduino IDE를 사용하여 코드를 ESP8266에 업로드하십시오.
버튼을 누르고 있었다가 놓으십시오.
Serial Monitor를 확인하여 결과를 관찰하십시오.
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.
왜 긴 누름과 짧은 누름이 필요한가요?
버튼의 수를 최소화하기 위해 하나의 버튼을 여러 용도로 사용할 수 있습니다. 예를 들어, 짧게 누르는 것은 작동 모드를 전환하는 데 사용되고, 길게 누르는 것은 장치를 끄는 데 사용될 수 있습니다.
긴 누름은 실수로 누르는 것을 방지하기 위해 사용됩니다. 예를 들어, 몇몇 장치에서는 공장 초기화를 위해 버튼을 사용합니다. 만약 실수로 눌러지면 위험할 수 있습니다. 이를 방지하기 위해, 장치는 공장 초기화가 버튼을 길게 누를 때만 활성화되도록 설계되었습니다(예: 5초 이상).