본문 바로가기
코딩/아두이노

[아두이노 강좌] 예제로 배우는 아두이노 #2 digitalRead() 사용법, 버튼 상태 읽기

by DIYver 2020. 3. 25.

<목표>

 

- digitalRead() 명령어를 이용하여 아두이노에 연결된 버튼의 상태를 읽을 수 있다.

 


<준비물>

 

- 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 버튼(택트 스위치), 브레드보드

 

아두이노 우노 / 시리얼 통신 케이블(USB-B타입) / 택트 스위치 / 브레드보드 / 저항

저항은 아무거나 있으면 됩니다.

저항 없이도 사용할 수 있습니다. 이때는 아두이노 자체의 풀업저항 회로를 이용해야 하는데, 여기서는 다루지 않습니다.


<회로도>

 

 

<1> 정식 회로, 풀 다운 저항 회로 사용


<코드>

 

 

int pushButton = 2;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  // make the pushbutton's pin an input:
  pinMode(pushButton, INPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input pin:
  int buttonState = digitalRead(pushButton);
  // print out the state of the button:
  Serial.println(buttonState);
  delay(1);        // delay in between reads for stability
}

코드는 아두이노 - 파일 - 예제 - 01.Basics - DigitalReadSerial  의 예제 파일과 동일 합니다.

예제파일을 쓰셔도 되고, 위의 코드를 복사하여 붙여넣으셔도 됩니다.

 

 


<실행 결과>

 

코드를 업로드하고, 시리얼 모니터를 확인해 본다.

 

이미지가 작게보이거나 애니메이션이 이상한경우 새로고침 <F5> 또는 이미지를 클릭하시면 정상적으로 출력됩니다.

1ms(0.001)마다 시리얼 모니터에서 버튼의 상태가 계속 표시된다.

버튼이 눌리면 1, 눌리지 않은 상태에서는 0으로 표시가 되는것을 확인할 수 있다.

 

그리고 아두이노 코드중 새로운 명령어를 살펴 보자면

Serial.begin( baud rate ) : baud rate(초당 펄스 수)의 통신속도의 시리얼을 사용한다. 이 명령어를 사용하여야 시리얼을 사용할 수 있고, 시리얼모니터로 확인이 가능하다.

digitalRead( pin_number ) : pin_number에 해당하는 핀의 전압 상태를 읽는다. 0(0V)1(5V)을 읽을 수 있다.

Serial.println( variable ) : 변수(variable)의 값을 시리얼 모니터에 출력하는데, 출력하고 줄을 바꾼다.(enter를 눌러서 줄바꾸는것과 동일)

 

이를 바탕으로 코드의 내용을 보면

 

setup 에서

시리얼을 사용하는데, 보레이트(baud rate)를 9600으로 한다.

버튼을 읽어들일 핀으로 2번 핀을 사용한다.

loop 에서

버튼상태 변수(buttonState)에 2번핀에서 측정되는 전압을 읽어서 저장한다.

시리얼 모니터에 2번핀의 전압 측정값을 출력한다.

 

따라서 버튼이 눌리는 상태가 매우 빠르게 시리얼 모니터에 계속 출력되는 결과를 볼 수 있다.

 

 

저항 없이 그냥 5V와 2번핀을 버튼으로 연결하면 되지 않느냐 하시는 분들은 직접 저항없이 회로를 구성해보시길~

풀업저항을 이용해야 되는 이유에 대해서 궁금하신 분들은 아래 링크를 참고하시면 도움 되실겁니다.

https://kocoafab.cc/tutorial/view/526

 

풀업(Pull-up), 풀다운(Pull-down)장치

개요 아두이노를 사용하다 보면 전류를 제어하는 기능을 사용하거나 버튼을 만들때 스위치를 사용해야 할 경우가 많이 생깁니다. 버튼식 스위치는 버튼 상태에 따라 다르게 출력되는 값을 통해 사물을 제어할 수 있습니다. 이때 종종 전기쪽 지식이 없는 사용자들은 그냥 무턱대고 연결하고 일반 센서처럼 사용하다가 버튼 스위치를 안 눌렀을때와 눌렀을때의 값이 차이가 없는 것을 보고 왜 안되는지 막히곤 합니다. 이번 글에서는 아두이노에서 스위치를 사용할 때 적용할 수 있

kocoafab.cc

 


 

※ 궁금하시거나 질문사항이 있으시면 댓글로 작성해주시면 답변해 드릴 수 있는 부분에서 친절히 답변드리겠습니다!

 

 

 

댓글