Arduino Nano와 기타 부품에 전원을 공급하는 가장 효과적인 방법은 다음 링크를 참조하세요: 아두이노 나노 전원 공급 방법.
아두이노 나노 코드 - 디바운스를 적용한 여러 버튼 처리
여러 버튼을 사용할 때 특정 상황에서는 복잡해질 수 있습니다:
버튼 디바운싱을 요구하는 애플리케이션 (버튼에 디바운싱이 필요한 이유를 보려면 왜 버튼에 디바운싱이 필요한가를 참조)
상태 변경(눌림/해제)을 감지해야 하는 애플리케이션
다행히도, ezButton library는 디바운스와 버튼 이벤트를 내부적으로 관리함으로써 이 과정을 간소화합니다. 이는 라이브러리를 사용할 때 타임스탬프와 변수를 관리하는 작업으로부터 사용자를 해방시켜줍니다. 추가적으로, 버튼 배열을 사용하면 코드의 명확성과 간결함을 향상시킬 수 있습니다.
/* * 이 아두이노 나노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-multiple-button */#include <ezButton.h>#define BUTTON_PIN_1 4 // 버튼 1에 연결된 아두이노 나노 핀#define BUTTON_PIN_2 5 // 버튼 2에 연결된 아두이노 나노 핀#define BUTTON_PIN_3 6 // 버튼 3에 연결된 아두이노 나노 핀#define BUTTON_PIN_4 7 // 버튼 4에 연결된 아두이노 나노 핀ezButtonbutton1(BUTTON_PIN_1); // 버튼 1을 위한 ezButton 객체 생성ezButtonbutton2(BUTTON_PIN_2); // 버튼 2을 위한 ezButton 객체 생성ezButtonbutton3(BUTTON_PIN_3); // 버튼 3을 위한 ezButton 객체 생성ezButton button4(BUTTON_PIN_4); // 버튼 4을 위한 ezButton 객체 생성voidsetup() {Serial.begin(9600);button1.setDebounceTime(100); // 디바운스 시간을 100 밀리초로 설정button2.setDebounceTime(100); // 디바운스 시간을 100 밀리초로 설정button3.setDebounceTime(100); // 디바운스 시간을 100 밀리초로 설정 button4.setDebounceTime(100); // 디바운스 시간을 100 밀리초로 설정}voidloop() {button1.loop(); // 먼저 loop() 함수를 반드시 호출해야 합니다.button2.loop(); // 먼저 loop() 함수를 반드시 호출해야 합니다.button3.loop(); // 먼저 loop() 함수를 반드시 호출해야 합니다. button4.loop(); // 먼저 loop() 함수를 반드시 호출해야 합니다.// 디바운스 후의 버튼 상태 가져오기int button1_state = button1.getState(); // 디바운스 후의 상태int button2_state = button2.getState(); // 디바운스 후의 상태int button3_state = button3.getState(); // 디바운스 후의 상태int button4_state = button4.getState(); // 디바운스 후의 상태/* Serial.print("The button 1 state: "); Serial.println(button1_state); Serial.print("The button 2 state: "); Serial.println(button2_state); Serial.print("The button 3 state: "); Serial.println(button3_state); Serial.print("The button 4 state: "); Serial.println(button4_state); */if (button1.isPressed())Serial.println("The button 1 is pressed");if (button1.isReleased())Serial.println("The button 1 is released");if (button2.isPressed())Serial.println("The button 2 is pressed");if (button2.isReleased())Serial.println("The button 2 is released");if (button3.isPressed())Serial.println("The button 3 is pressed");if (button3.isReleased())Serial.println("The button 3 is released");if (button4.isPressed())Serial.println("The button 4 is pressed");if (button4.isReleased())Serial.println("The button 4 is released");}
사용 방법
위 이미지와 같이 배선하세요.
Arduino Nano 보드를 USB 케이블을 통해 PC에 연결하세요.
PC에서 Arduino IDE를 엽니다.
올바른 Arduino Nano 보드(예: Arduino Nano Uno)와 COM 포트를 선택하세요.
Arduino IDE의 왼쪽 바에서 Libraries 아이콘을 클릭하세요.
“ezButton”을 검색한 다음, Arduino NanoGetStarted에 의한 버튼 라이브러리를 찾으세요.
ezButton 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
위의 코드를 복사하여 아두이노 IDE에 붙여넣으세요.
아두이노 IDE의 Upload 버튼을 클릭하여 코드를 아두이노 나노 보드에 컴파일하고 업로드하세요.
아두이노 IDE에서 시리얼 모니터 열기
버튼을 하나씩 눌렀다 놓기
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
The button 1 is pressed
The button 1 is released
The button 2 is pressed
The button 2 is released
The button 3 is pressed
The button 3 is released
The button 4 is pressed
The button 4 is released
Ln 11, Col 1
Arduino Nano on COM15
2
아두이노 나노 코드 - 배열을 사용한 다중 버튼
위의 코드를 버튼 배열을 사용하여 개선할 수 있습니다. 다음 코드는 이 배열을 사용하여 버튼 객체들을 처리합니다.
/* * 이 아두이노 나노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-multiple-button */#include <ezButton.h>#define BUTTON_NUM 4 // 버튼의 수#define BUTTON_PIN_1 4 // 버튼 1에 연결된 아두이노 나노 핀#define BUTTON_PIN_2 5 // 버튼 2에 연결된 아두이노 나노 핀#define BUTTON_PIN_3 6 // 버튼 3에 연결된 아두이노 나노 핀#define BUTTON_PIN_4 7 // 버튼 4에 연결된 아두이노 나노 핀ezButtonbuttonArray[] = {ezButton(BUTTON_PIN_1),ezButton(BUTTON_PIN_2),ezButton(BUTTON_PIN_3),ezButton(BUTTON_PIN_4)};voidsetup() {Serial.begin(9600);for (byte i = 0; i < BUTTON_NUM; i++) {buttonArray[i].setDebounceTime(100); // 디바운스 시간을 100밀리초로 설정 }}voidloop() {for (byte i = 0; i < BUTTON_NUM; i++) buttonArray[i].loop(); // 먼저 loop() 함수를 호출해야 함for (byte i = 0; i < BUTTON_NUM; i++) {// 디바운스 된 후의 버튼 상태 가져오기int button_state = buttonArray[i].getState(); // 디바운스 된 후의 상태/* Serial.print("The button "); Serial.print(i + 1); Serial.print(": "); Serial.println(button_state); */if (buttonArray[i].isPressed()) {Serial.print("The button ");Serial.print(i + 1);Serial.println(" is pressed"); }if (buttonArray[i].isReleased()) {Serial.print("The button ");Serial.print(i + 1);Serial.println(" is released"); } }}
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.