3장. 버튼을 이용하여 LED 제어하기

来自Microduino Wikipedia
Md讨论 | 贡献2014年9月11日 (四) 01:35的版本 (Created page with "{{Language|第三课--按钮控制的LED开关/ko}} {| style="width: 800px;" |- | ==목표== 처음 두개의 예제에서는 LED를 직접 제어하는 방법을 알아봤다...")
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索
Language English

목표

처음 두개의 예제에서는 LED를 직접 제어하는 방법을 알아봤다. 버튼을 추가해서 LED를 제어할 수 있다면 하드웨어와 소프트웨어의 조화를 만들어 낼 수 있을 것이다. 두 예제에서 LED 출력제어를 위해 마이크로두이노 I/O 포트했으며 버튼 입력을 모니터링하기 위해서는 어떤 방법을 사용해야 할까? 이번 장에선 마이크로두이노의 입력을 설정하고 입력값을 읽고 사용하는 방법에 대해 알아보도록 하자.


부품

버튼

  • 버튼 동작원리
Button.jpg

4핀 버튼중에 두핀은 항상 연결되어 있으로 PCB 제작시 유용하게 활용될 수 있다.

  • 버튼 연결
Button connection.jpg

회로도

Button schematic.jpg

외부의 저항을 풀다운 저항을 사용하면 누르지 않았을 경우 '0'을 누를 경우 '1'을 나나낸다.


프로그램

  • 버튼값 LED에 표시하기
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 끈다.
  }
}
  • LED voltage flip
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로 변화시키기

결과

  • 프로그램 1 : LED로 입력 버튼값 표현하기. 입력인 High 일때 LED 켜고 Low 일때는 끈다.
  • 프로그램 2 : 버튼을 누를 때 마다. LED를 깜빡이고 버튼 안티 쉐이킹을 적용했다.

비디오