라즈베리파이, 아두이노

[간단한 아두이노 코딩] 3. 버튼 입력 제어하기

포도알77 2020. 11. 24. 09:54

버튼 입력 제어하기

 

1. 버튼 동작 방식

 우리가 일상 생활에서 접하는 버튼들은 아래와 같이 간단한 구조로 되어 있다.

 

 위와 같이 버튼을 눌렀을 때는 A와 B 사이에 끊어진 도선이 연결되면서 전기가 흐르는 형식이다. 이렇게 직접적으로 전류를 제어하는 버튼들이 있는 반면 반대로 처음에는 연결되어 있다가 눌렀을 때 떨어지는 반대 버튼도 있고, 전류의 흐름을 직접 제어하지 않고 간접적으로 제어하는 버튼들도 있다.

 

 우리는 가장 기본적인 형태의 버튼을 이용하여 버튼 입력을 받고, 그에 따른 동작을 수행할 수 있도록 코드를 구성할 예정이다.


 2. 푸시 버튼

 이번에 사용할 푸시 버튼은 앞에서 말한 것과 같이 눌렀을 때 도선이 연결되어 동작하는 버튼으로, 4개의 접점을 가진다.

 이 4개의 접점을 통해서 기존 버튼의 동작과 회로에 단단히 고정시킬 수 있게 된다. 일반적으로 한 면에 붙어 있는 2개의 핀(A, B 또는 C, D)들이 연결되지 않은 상태이다.

 

 


 

3. 버튼 인식

 아두이노에서 활용하기 위해서는 실제로 버튼이 눌려졌음을 인지하여야 한다. 이러한 인식 과정에는 당연히 GPIO를 이용할 것이고, GPIO에서는 전압 인가 여부에 따라 디지털 핀이면 1 또는 0을 아날로그 값이라면 전압 값에 대응되는 값을 반환하게 된다.

 

 

   그리고 이 GPIO 핀을 계속해서 읽어서 만약 전압이 1이라면 버튼이 연결되었다고 생각하고 원하는 버튼 동작을 수행하면 된다. 

 

 우리는 버튼이 클릭되면 LED를 0.5초씩 2초간 Blink하는 동작을 수행하도록 하자.

 


4. 회로 구성

실제 구성되는 회로는 아래와 같다.

 

 


5. 소스코드

#define LED_RED 7
#define BUTTON 8
// LED GPIO 7번, BUTTON GPIO 8번

// LED를 0.5초씩 2초간 Blink 하는 함수
void blinkLED(){
  // for 루프를 이용하여 2회 실행
  for(int i = 0; i < 2; i++){
    // LED 블링크 0.5초 켜고, 0.5초 끄고
    digitalWrite(LED_RED, HIGH);
    delay(500);
    digitalWrite(LED_RED, LOW);
    delay(500);
  }
}

void setup() {
  // 버튼 핀 모드 : INPUT
  // LED 핀 모드 : OUTPUT
  pinMode(BUTTON, INPUT);
  pinMode(LED_RED, OUTPUT);
}

void loop() {
  // 버튼의 GPIO에 전원이 인가되었다면
  // LED 블링키ㅡ
  if(digitalRead(BUTTON)==HIGH)
    blinkLED();
}

 

 

페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사