아두이노 우노 R4 - 버튼

버튼은 많은 Arduino UNO R4 프로젝트에 사용되는 간단하지만 중요한 구성 요소입니다. 초보자에게는 기계적 및 물리적 특성 때문에 복잡하게 보일 수 있습니다. 이 튜토리얼은 초보자가 이를 쉽게 이해할 수 있도록 설계되었습니다. 시작해봅시다!

아두이노 UNO R4 버튼

※ NOTE THAT:

우리가 Arduino Uno R4에서 버튼을 사용하는 방법을 배우기 전에, 초보자들이 자주 겪는 두 가지 일반적인 오류를 강조하고자 합니다:

  1. 부동 입력 문제:
    • 증상: 버튼이 Arduino UNO R4 입력 핀에 연결되었을 때, 입력 핀의 상태가 예측할 수 없으며 버튼 상태를 반영하지 않습니다.
    • 원인: 버튼 핀이 풀다운 또는 풀업 저항기에 연결되어 있지 않습니다.
    • 해결책: 입력 핀에 풀다운 또는 풀업 저항기를 연결하세요. 보다 자세한 내용은 이후의 튜토리얼에서 제공될 것입니다.
  • 채터링 현상:
    • 증상: Arduino UNO R4의 코드는 버튼의 상태를 읽고 상태 변경(HIGH에서 LOW로, 또는 LOW에서 HIGH로)을 감지하여 버튼 누름 이벤트를 식별하려고 합니다. 그러나 버튼이 한 번만 눌려도 Arduino Uno R4는 여러 번 눌림을 감지할 수 있습니다.
    • 원인: 기계적 특성으로 인해 입력 핀의 상태가 한 번의 눌림으로 LOWHIGH 사이를 여러 번 빠르게 전환합니다.
    • 해결책: 디바운스를 구현하십시오. 더 자세한 내용은 Arduino UNO R4 - 버튼 - 디바운스 튜토리얼에 있을 것입니다.

    채터링은 버튼 누름 횟수를 정확히 세어야 하는 응용 프로그램에만 영향을 미칩니다. 다른 응용 프로그램에서는 문제가 되지 않을 수 있습니다.

    Hardware Preparation

    1×Arduino UNO R4 WiFi Amazon
    1×Arduino UNO R4 Minima (Alternatively) Amazon
    1×USB Cable Type-C 쿠팡 | Amazon
    1×Breadboard-mount Button with Cap 쿠팡 | Amazon
    1×Breadboard-mount Button Kit 쿠팡 | Amazon
    1×Panel-mount Button Amazon
    1×Breadboard 쿠팡 | Amazon
    1×Jumper Wires Amazon
    1×(Recommended) Screw Terminal Block Shield for Arduino UNO R4 쿠팡 | Amazon
    1×(Recommended) Breadboard Shield For Arduino UNO R4 쿠팡 | Amazon
    1×(Recommended) Enclosure For Arduino UNO R4 Amazon
    1×(Recommended) Power Splitter For Arduino UNO R4 Amazon
    공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

    버튼 정보

    푸쉬버튼(또는 택타일 버튼, 일시적 스위치)은 누르고 있을 때 닫히고, 손을 떼면 열리는 스위치입니다. 푸쉬버튼은 여러 종류가 있으며, 주로 두 그룹으로 나눌 수 있습니다:

    • PCB 장착용 푸시 버튼 (브레드보드에서 사용 가능)
    • 패널 장착용 푸시 버튼
    아두이노 UNO R4 푸시 버튼

    핀아웃

    PCB 장착 버튼은 보통 네 개의 핀이 있습니다.

    버튼 핀아웃

    이 핀들은 내부에서 쌍으로 연결되어 있어서, 내부에서 연결되지 않은 네 개의 핀 중 두 개만 사용하면 됩니다.

    버튼을 연결하는 방법은 네 가지가 있지만 실제로는 두 가지입니다. (이미지를 참조하세요.)

    버튼 사용 방법

    버튼에는 네 개의 핀이 있지만, 왜 두 개만 사용하나요? ⇒ 이는 PCB(보드)에서 안정적으로 고정되고 압력을 견딜 수 있도록 하기 위함입니다.

    패널 장착 버튼은 일반적으로 두 개의 핀이 있습니다.

    2핀 푸시 버튼 핀아웃
    image source: diyables.io

    작동 원리

    • 버튼이 눌리지 않으면 핀 A와 핀 B는 연결되지 않습니다.
    • 버튼이 눌리면 핀 A와 핀 B가 연결됩니다.
    버튼 작동 방식

    아두이노 UNO R4 - 버튼

    하나의 버튼 핀은 VCC 또는 GND에 연결되고, 다른 핀은 Arduino UNO R4의 핀에 연결됩니다.

    우리는 입력 핀으로 설정된 Arduino UNO R4의 핀 상태를 확인하여 버튼이 눌렸는지 여부를 결정할 수 있습니다.

    버튼 상태 및 누름 상태

    버튼 상태와 누름 상태 간의 관계는 버튼을 Arduino UNO R4에 어떻게 연결하느냐와 Arduino UNO R4의 핀 설정에 따라 다릅니다.

    Arduino UNO R4에서는 버튼을 사용하는 두 가지 방법이 있습니다:

    1. 하나의 버튼 핀을 VCC에 연결하고 다른 핀을 풀다운 저항과 함께 Arduino UNO R4 핀에 연결합니다.
      • 버튼이 눌리면 Arduino UNO R4 핀 상태가 HIGH가 됩니다. 그렇지 않으면 Arduino UNO R4 핀 상태는 LOW가 됩니다.
      • 반드시 외부 저항을 사용해야 합니다.
  • 하나의 버튼 핀을 GND에 연결하고 다른 핀을 풀업 저항과 함께 Arduino UNO R4 핀에 연결합니다.
    • 버튼이 눌리면 Arduino UNO R4 핀 상태는 LOW가 됩니다. 그렇지 않으면 Arduino UNO R4 핀 상태는 HIGH가 됩니다.
    • 내부 또는 외부 저항 중 하나를 사용할 수 있습니다. 내부 저항은 Arduino UNO R4에 내장되어 있으며 Arduino 코드로 활성화할 수 있습니다.

    ※ NOTE THAT:

    풀다운 또는 풀업 저항을 사용하지 않으면 버튼이 눌려지지 않았을 때 입력 핀이 "부유 상태"가 됩니다. 이는 핀의 상태가 예측할 수 없게 HIGH LOW로 변경되어 잘못된 판독값을 발생시킬 수 있음을 의미합니다.

    • 최악의 실천: 외부 풀다운 또는 풀업 저항 없이 pinMode(BUTTON_PIN, INPUT)를 사용하여 Arduino UNO R4 핀을 입력으로 설정하기.
    • 최선의 실천: pinMode(BUTTON_PIN, INPUT_PULLUP)를 사용하여 내부 풀업 저항과 함께 Arduino UNO R4 핀을 설정하기. 이는 외부 저항이 필요하지 않습니다.

    초보자에게 쉽게 만들기 위해 이 튜토리얼은 가장 간단한 방법을 사용합니다: 외부 저항 없이 Arduino UNO R4 핀을 내부 풀업 입력으로 설정합니다. 초보자들은 풀업 또는 풀다운 저항을 연결하는 것에 대해 걱정할 필요가 없습니다. 제공된 Arduino 코드를 사용하기만 하면 됩니다.

    Wiring Diagram

    • 아두이노 UNO R4 및 PCB 장착 버튼을 위한 배선도
    아두이노 UNO R4 버튼 배선도

    이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

    • 아두이노 UNO R4 및 패널 장착 버튼의 배선도
    아두이노 UNO R4 양단자 푸시 버튼 배선 다이어그램

    이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

    버튼 프로그래밍 방법

    • PinMode() 함수를 사용하여 Arduino UNO R4의 핀 7을 내부 풀업 입력으로 설정합니다.
    pinMode(7, INPUT_PULLUP);
    • Arduino UNO R4 핀의 상태를 확인하기 위해 digitalRead() 함수를 사용합니다.
    int button_state = digitalRead(BUTTON_PIN);

    ※ NOTE THAT:

    두 가지 일반적인 사용 사례가 있습니다:

    • 첫 번째: 입력이 HIGH일 때 행동을 수행하고, 입력이 LOW일 때 반대 행동을 수행합니다.
    • 두 번째: 입력이 LOW에서 HIGH로 (또는 HIGH에서 LOW로) 변할 때 행동을 수행합니다.

    목적에 따라 이 옵션 중 하나를 선택합니다. 예를 들어, 버튼을 사용하여 LED를 제어할 때:

    • 버튼이 눌렸을 때 LED가 켜지고 눌리지 않았을 때 꺼져야 한다면 첫 번째 시나리오를 선택해야 합니다.
    • 버튼을 누를 때마다 LED가 켜지거나 꺼지게 하려면 두 번째 시나리오를 선택해야 합니다.

    Arduino UNO R4 코드 - 버튼 상태 읽기

    #define BUTTON_PIN 7 // The Arduino UNO R4 pin connected to the button void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as a pull-up input pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: int button_state = digitalRead(BUTTON_PIN); // print out the button's state Serial.println(button_state); delay(500); }

    Detailed Instructions

    이 지침을 단계별로 따르세요:

    • Arduino UNO R4 WiFi/Minima를 처음 사용하는 경우, Arduino IDE에서 Arduino UNO R4 WiFi/Minima 환경 설정하기에 대한 튜토리얼을 참조하십시오.
    • 제공된 다이어그램에 따라 버튼을 Arduino UNO R4에 연결하십시오.
    • USB 케이블을 사용하여 Arduino Uno R4 보드를 컴퓨터에 연결하십시오.
    • 컴퓨터에서 Arduino IDE를 실행하십시오.
    • 적절한 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi) 및 COM 포트를 선택하십시오.
    • 위의 코드를 복사하여 Arduino IDE에서 엽니다.
    • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino UNO R4에 전송하십시오.
    아두이노 IDE - 코드 업로드하는 방법
    • 시리얼 모니터를 엽니다.
    • 버튼을 여러 번 눌렀다 놓습니다.
    • 시리얼 모니터에서 결과를 확인합니다.
    COM6
    Send
    1 1 1 0 0 0 0 0 0 1 1 1
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    1은 켜짐을 의미하고, 0은 꺼짐을 의미합니다.

    코드 설명

    설명은 위의 아두이노 코드의 주석 섹션에 있습니다.

    Arduino UNO R4 코드 - 버튼의 누름 및 놓음 이벤트 감지

    버튼이 눌리고 해제될 때를 인식하도록 코드를 변경합시다.

    /* * 이 Arduino UNO R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-button */ #define BUTTON_PIN 7 // The Arduino UNO R4 pin connected to the button int button_state; // the current state of button int prev_button_state = LOW; // the previous state of button void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as a pull-up input pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if (prev_button_state == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if (prev_button_state == LOW && button_state == HIGH) Serial.println("The button is released"); // save the last state prev_button_state = button_state; }

    Detailed Instructions

    • 위의 코드를 복사하여 Arduino IDE에 붙여넣으세요.
    • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino UNO R4로 전송하세요.
    • 시리얼 모니터를 엽니다.
    • 버튼을 눌렀다 놓으세요.
    • 시리얼 모니터에서 결과를 확인하세요.
    COM6
    Send
    The button is pressed The button is released
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    ※ NOTE THAT:

    • 버튼을 한 번만 누르고 놓아도 시리얼 모니터는 여러 번의 누름 및 놓음 이벤트를 표시할 수 있습니다. 이 일반적인 현상은 "채터링 현상"으로 알려져 있습니다. 더 자세한 내용은 Arduino UNO R4 - 버튼 디바운스 튜토리얼에서 확인할 수 있습니다.
    • 여러 버튼을 사용하는 초보자를 위해 프로세스를 단순화하기 위해 ezButton이라는 라이브러리를 개발했습니다. ezButton 라이브러리에 대해 알아보세요.

    Video Tutorial

    비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

    ※ OUR MESSAGES

    • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!