3장. 버튼을 이용하여 LED 제어하기
Language | English |
---|
목표처음 두개의 예제에서는 LED를 직접 제어하는 방법을 알아봤다. 버튼을 추가해서 LED를 제어할 수 있다면 하드웨어와 소프트웨어의 조화를 만들어 낼 수 있을 것이다. 두 예제에서 LED 출력제어를 위해 마이크로두이노 I/O 포트했으며 버튼 입력을 모니터링하기 위해서는 어떤 방법을 사용해야 할까? 이번 장에선 마이크로두이노의 입력을 설정하고 입력값을 읽고 사용하는 방법에 대해 알아보도록 하자.
부품
버튼
4핀 버튼중에 두핀은 항상 연결되어 있으로 PCB 제작시 유용하게 활용될 수 있다.
회로도외부의 저항을 풀다운 저항을 사용하면 누르지 않았을 경우 '0'을 누를 경우 '1'을 나나낸다.
프로그램
const int buttonPin = 2; // 버튼 입력포트 정의
const int ledPin = 11; // LED 출력포트 정의
int buttonState = 0; // 버튼 값 초기화
void setup() {
pinMode(ledPin, OUTPUT); // LED 출력포트를 출력으로 정의
pinMode(buttonPin, INPUT); // 버튼 입력핀을 입력으로 정의
}
void loop(){
buttonState = digitalRead(buttonPin); // 버튼핀(buttonPin)으로 부터 값을 읽는 함수호출
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH); // 입력값이 HIGH이면, LED 켠다. (LED 애노드는 I/O핀에 연결하고, 캐소드는 GND에 연결한 상태)
}
else {
digitalWrite(ledPin, LOW); // LED 끈다.
}
}
const int buttonPin = 2; // 버튼 입력포트 정의
const int ledPin = 11; // LED 출력포트 정의
int buttonState = 0;
boolean led; // LED 상태값 변수 정의
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // 내부풀업 저항을 이용하여 버튼 입력포트 정의
// pinMode(buttonPin, INPUT); // 내부풀업 저항을 이용하지 않고 버튼 입력포트 정의. 외부 풀업저항을 이용한다.
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) // 외부 풀다운저항을 사용하면 초기값이 '0'이므로 버튼을 누른 경우 '1'이 되므로 버튼을 누르지 않으면 LED가 깜밖이지 않는다.
{
delay(200); // 안정화를 위한 시간지연
// delay(1000); // 오래 누르는 경우
// if (buttonState == LOW) // 버튼 입력이 '0'인지 확인
led=!led; // LED 값을 바꾼다.
}
digitalWrite(ledPin, led);
}
이번 장에서는 버튼의 안정적인 입력을 위해서 시간지연을 적용했다.. 또한 100nF 커패시터를 버튼입력포트에 연결하는 방법도 있다. 버튼 입력의 안정화를 위한 방법으로 http://www.geek-workshop.com/thread-74-1-1.html를 참조하세요. digitalRead()함수 사용하기핀의 값을 읽고 High 또는 Low로 변화시키기 결과
비디오 |