[아두이노 강좌] 12. 아두이노 디지털핀 신호 입력받기 / pinMode(), digitalRead()

2dc6cb7277117a02103aaa55ec030085_1462621
 

 

2dc6cb7277117a02103aaa55ec030085_1462621 개요

 

아두이노의 디지털 핀으로 디지털 신호를 입력받아 보도록 합시다! 디지털 신호, 아두이노

디지털 핀에 대한 개념은 이전 강좌 11번을 참고해주세요.

 

 2dc6cb7277117a02103aaa55ec030085_1462622 

 

 

2dc6cb7277117a02103aaa55ec030085_1462622 스위치로 LED 제어하기

 

이전 강좌11에서는 디지털신호를 출력하여 LED의 전원을 제어해봤습니다. 입력도 별반

다르지 않습니다. 외부에서 아두이노로 HIGH신호, LOW신호를 보내면 그게 바로 아두

이노가 디지털 신호를 입력받는겁니다. 그림으로 살펴볼까요?

 


2dc6cb7277117a02103aaa55ec030085_1462622


    그림1. 디지털 신호 입력

 

(외부기기라고 표현했지만 아두이노가 아두이노로 신호를 보낼 수도 있어요.. ^^) 

 

위 사진과 같이 외부에서 아두이노 디지털 핀으로 3~5V를 보내는 경우 아두이노에 디지털

신호 HIGH가 입력됬다고 표현하며, 0~1.5V가 입력된 경우 LOW가 입력됬다고 표현합니다.

본격적인 실습에 앞서 스위치 부품에 대해 간단하게 알아보도록 합시다.

 

2dc6cb7277117a02103aaa55ec030085_1462624

 

2dc6cb7277117a02103aaa55ec030085_1462623 스위치(Switch)란?

스위치는 전기의 흐름을 잇거나 끊기 위한 제어장치입니다. 조명이나 컴퓨터 등을 끄거나 

킬 때 누르는 버튼도 일종의 스위치입니다. 본 예제에서 사용되는 스위치는 푸시 버튼으로, 

상단의 버튼 부분과 하단의 다리 4개로 구성되어 있습니다.

 

2dc6cb7277117a02103aaa55ec030085_1462623 

         그림2. 푸시버튼 내부 회로도 

 

버튼을 누르지 않을 경우, 1번과 2번 // 3번과 4번 다리가 서로 연결되어 있으며 버튼을

누를 경우, 4개의 다리가 모두 연결되어 전기가 통하게 됩니다.


2dc6cb7277117a02103aaa55ec030085_1462623

2dc6cb7277117a02103aaa55ec030085_1462623 준비물

2dc6cb7277117a02103aaa55ec030085_1462623

2dc6cb7277117a02103aaa55ec030085_1462623
 

2dc6cb7277117a02103aaa55ec030085_1462623 회로도 연결

2dc6cb7277117a02103aaa55ec030085_1462623

LED를 디지털 핀 8번과 GND에 연결해주도록 합니다. (중간에 220옴 저항)

푸시버튼을 5V, GND, 디지털 2번핀에 연결해주도록 합니다. (10K저항 사용)


회로에 대해 간단하게 설명해보도록 하겠습니다.

① LED는 디지털 8번핀에서 HIGH를 출력하느냐, LOW를 출력하느냐에 따라 전원이 

ON되거나 OFF됩니다.

② 회로를 보면 아두이노 5V 출력핀 - 버튼 스위치 - 디지털2번핀 으로 연결되어있습니다. 

버튼을 누를 경우 디지털 2번핀에 5V(HIGH신호)가 입력되겠죠? 

③ 우리가 만들 프로그램의 내용은 이렇습니다. 버튼을 눌러 디지털 핀 2번에 HIGH신호가 

입력되면 디지털 8번핀에 HIGH 신호를 보내고, 버튼을 누르지 않아 디지털 2번핀에 LOW

신호가 입력될 경우 디지털 8번핀에 LOW 신호를 보낸다. 그럼 바로 GOGO!

 

2dc6cb7277117a02103aaa55ec030085_1462623
 

2dc6cb7277117a02103aaa55ec030085_1462624 프로그램 코드 (2)


int LED = 8;                     // LED라는 변수를 만들고 8을 저장한다.

int BUTTON = 2;             // LED라는 변수를 만들고 2를 저장한다.


void setup() {                      

pinMode(BUTTON, INPUT);    // BUTTON(디지털 2번)핀을 입력모드로 

pinMode(LED, OUTPUT);     // LED(디지털 8번)핀을 출력모드로 

}


void loop() {                                

if (digitalRead(BUTTON) == HIGH) {   // 만약 2번핀에 HIGH가 입력된다면

digitalWrite(LED, HIGH);         // 8번핀에 HIGH 신호를 출력하고,

} 

else {              // 그게 아니라면(2번핀에 HIGH가 입력되지 않는다면)

digitalWrite(LED, LOW);    // 8번핀에 LOW 신호를 출력한다.

}

}


뭔가 새로 추가된게 굉장히 많아 보여요.. 하지만 별거 없습니다. 코드를 해석해봅시다.


프로그램 해석

맨위에서 변수라는 저장공간을 만들고 그안에 대입할 수를 저장합니다. 즉 LED라는 공간에 

8을 저장함으로써 LED를 8로 사용할 수 있습니다. 변수에 대한 내용은 여기를 클릭해서

더 자세하게 공부해보세요. 

버튼(2번핀)을 입력모드로, LED(8번핀)을 출력모드로 설정한 후, 버튼에 HIGH신호가

입력되면 LED에 HIGH신호를 출력하여 LED를 켜고, 버튼에 LOW 신호가 입력되면 LED에

LOW신호를 출력하여 LED를 끕니다.


2dc6cb7277117a02103aaa55ec030085_1462624
 

2dc6cb7277117a02103aaa55ec030085_1462624

 

2dc6cb7277117a02103aaa55ec030085_1462624 사용된 함수 정리하기


■digitalRead(핀번호)

설정 핀에 디지털 신호를 입력받기 위한 함수입니다.

매개변수

핀번호 - 신호를 입력받을 디지털 핀 번호를 적어줍니다.

 

■if(조건문)

'만약에 ~라면' 이라는 조건문을 만들 수 있습니다.

매개변수

조건문 - 해당되는 '조건문'을 적어줍니다.

  

2dc6cb7277117a02103aaa55ec030085_1462625

강좌를 마무리 하기전에 회로도를 다시 한번 살펴봅시다. 회로를 살펴보면 10K 저항이 

연결된 것을 확인할 수 있습니다. 이 저항은 무슨 용도로 사용된 것일까요? 

 

2dc6cb7277117a02103aaa55ec030085_1462625
 

바로 플롯현상 때문입니다. 쉽게 말해, 회로에서 저항을 제거하면 아두이노에서 나오는 5V의 

전기가 디지털 2번핀으로 들어가지 않고 길을 해매어 이도저도 아닌 상태가 됩니다. 전류는 

저항이 낮은 쪽으로 흐르는 성질이 있기 때문에 이를 이용하여 플롯현상을 해결해준 것입니다.

자세한 내용(플롯현상, 풀 업 저항회로, 풀 다운 저항 회로)은 여기를 클릭하여 확인해보세요. ^^ 

▶아래 플러스 친구 버튼을 통해 다양한 정보와 교제 자료 및 이벤트등의 소식을 받아보실 수 있습니다.




모바일 버전으로 보기