아두이노 내부 풀업 저항 사용하기
원문 : 아두이노 공식 홈페이지 http://arduino.cc/en/Tutorial/InputPullupSerial#.UwLY0GJ_uKI
1. 아두이노 내부 풀업 저항
이 예제에서는 pinMode() 함수에 INPUT_PULLUP 파라미터를 사용해서 내부 풀업 저항을 사용하는 방법을 설명합니다. 아두이노 내부 풀업 저항을 사용하면 저항 없이도 간편하게 버튼을 연결할 수 있습니다. 아두이노 공식 홈페이지에서 소개하는 예제를 번역했습니다. 사용자가 버튼을 누르면 Serial 통신으로 PC로 상태 값을 전송하며 아두이노 보드에 내장된 LED (13번 핀에 연결된) 를 on/off 시킵니다.
2. 연결방법
버튼의 다리 한 쪽은 아두이노 디지털 2번 핀에 연결하고 나머지 한 쪽은 GND 핀에 연결합니다. 이걸로 준비는 끝.
풀업 저항을 직접 만들어서 사용하는 경우 VCC와 버튼 사이에 저항을 넣고, 저항과 버튼 사이에서 선을 빼서 2번 핀으로 연결하는 형태가 됩니다. 여기서는 단순하게 2번 핀 – 스위치 – GND 로 연결하는 대신 2번 핀 내부의 풀업 저항을 활성화 시킵니다.
버튼을 누르지 않은 상태(open 상태) 에서는 2번 핀 내부의 풀업 저항이 활성화 되면서 5V로 연결됩니다. 따라서 2번 핀의 값을 읽으면 HIGH 값을 읽을 수 있습니다.
버튼을 누를 경우 2번 핀과 GND의 연결이 종료되는 효과가 생기므로 LOW 값을 읽을 수 있습니다.
.
3. 소스 코드 (스케치)
Setup() 함수 내에서 사용하는 코드입니다. 9600 bps 전송속도로 PC와 Serial 연결을 하기 위해 아래 코드를 사용합니다.
Serial.begin(9600);
아래 코드로 디지털 2번 핀의 내부 풀업 저항을 활성화 할 수 있습니다.
pinMode(2,INPUT_PULLUP);
아두이노 보드 내장 LED를 제어하기 위해 13번 핀 사용을 선언합니다.
pinMode(13, OUTPUT);
이제 메인 루프 함수에서 처리하는 내용들입니다.
2번 핀과 연결된 버튼 상태를 읽는 부분입니다.
int sensorValue = digitalRead(2);
아래는 Serial 통신으로 데이터를 PC로 전송하는 부분. 버튼을 누른 상태이면 0, 버튼에서 손을 뗀 상태이면 1 이 전송됩니다.
Serial.println(sensorValue, DEC);
아래 코드로 버튼 상태에 따라 LED 를 on/off 시킵니다.
digitalWrite(13, LOW);
digitalWrite(13, HIGH);
/* Input Pullup Serial This example demonstrates the use of pinMode(INPUT_PULLUP). It reads a digital input on pin 2 and prints the results to the serial monitor. The circuit: * Momentary switch attached from pin 2 to ground * Built-in LED on pin 13 Unlike pinMode(INPUT), there is no pull-down resistor necessary. An internal 20K-ohm resistor is pulled to 5V. This configuration causes the input to read HIGH when the switch is open, and LOW when it is closed. created 14 March 2012 by Scott Fitzgerald http://www.arduino.cc/en/Tutorial/InputPullupSerial This example code is in the public domain */ void setup(){ //start serial connection Serial.begin(9600); //configure pin2 as an input and enable the internal pull-up resistor pinMode(2, INPUT_PULLUP); pinMode(13, OUTPUT); } void loop(){ //read the pushbutton value into a variable int sensorVal = digitalRead(2); //print out the value of the pushbutton Serial.println(sensorVal); // Keep in mind the pullup means the pushbutton's // logic is inverted. It goes HIGH when it's open, // and LOW when it's pressed. Turn on pin 13 when the // button's pressed, and off when it's not: if (sensorVal == HIGH) { digitalWrite(13, LOW); } else { digitalWrite(13, HIGH); } }