전자, 전기, 소프트웨어, 기계, 3D 프린터, 아두이노, 라즈베리파이, 쇼핑몰 창업

전체 페이지뷰

이 블로그 검색

최신글

[Blender] 3D viewport 사용법

[강좌] 10. 아두이노에서 푸시버튼 사용하기


무작정 보고 따라하며 배우는 아두이노 강좌입니다.
아두이노 공식 사이트에서 제공하는 강좌를 바탕으로 작성되었습니다.
해당 게시글은 Arduino UNO 보드를 기준으로 작성되었습니다.

10. 푸시버튼 사용하기


아두이노에서 버튼은 빠질 수 없는 존재입니다.
  버튼을 통해 아두이노에 입력을 주어 하드웨어와 소프트웨어를 잇는 다리 역할을 합니다. 시리얼 모니터와 같은 방법으로 아두이노에 입력을 주는 방법이 있지만, 푸쉬버튼을 사용하면 아두이노와 pc가 연결되어 있지 않더라도 외부의 물리적인 힘으로 프로그램을 제어할 수 있게 됩니다.
  기본적으로 푸쉬버튼을 제어하는 방법을 알아야, 그를 기반으로 다른 제어장치를 쉽게 사용할 수 있습니다. 이번 강좌에서는 푸쉬버튼으로 아두이노의 내장 LED를 제어하는 방법을 알려드리겠습니다.

  푸쉬버튼이나 스위치는 눌렀을 경우 두개의 접점을 이어주는 역할을 합니다. 푸시버튼의 한쪽 단자에 전압을 걸어주고 다른 단자에 아두이노에서 신호를 읽어올 수 있는 디지털 단자를 연결한다면, 푸시버튼을 누르는 경우 디지털단자로 전압이 들어가게 되어 이를 아두이노에서 읽어와 스위치 상태를 판단합니다.

준비물 ( 아두이노와 PC는 기본입니다 )

10k 저항, 브레드보드, 점퍼케이블, 푸시버튼

회로도

  보드와 3개의 선을 연결합니다. 먼저 전원을 브레드보드에 연결해 줍니다. 브레드보드 양 옆의 전원선에 아두이노 5V와 GND를 연결합니다. 다른 선 하나는 아두이노의 2번핀 (디지털 핀)과 푸쉬버튼의 한쪽을 연결합니다.
  브레드보드에서 스위치에 아두이노 2번핀이 연결된 곳과 같은곳에 10k 풀다운 저항을 설치해야 합니다. 풀다운 저항에 대해서는 다른 강좌에서 설명하도록 하고, 디지털 단자와 같은 단자에 10k옴 풀다운 저항과 GND를 연결합니다. 스위치의 다른 단자는 5V 전원과 연결합니다.

  푸시버튼을 누르지 않는 일반적인 상태라면, 2번핀은 10k 저항과 GND에 연결되게 됩니다. 이는 아두이노에서 LOW 상태로 인식하고, 푸시버튼을 누르게 되면 2번핀에는 5V의 전압이 들어가게 됩니다. 이를 HIGH 상태로 인식하게 됩니다.

  이 회로를 정반대로 설치하여 풀업저항과 5V를 연결하게 되면, 버시버튼을 누르지 않았을때 HIGH 눌렀을 때 LOW 상태를 나타냅니다.

  만약 2번핀을 아무것도 연결하지 않고 내버려 둔다면, LED는 켜지고 꺼짐을 반복할 것입니다. 2번핀의 입력이 불안정한 플로팅 상태가 되기 때문입니다. 이런 플로팅을 해결하기위해 풀다운, 풀업 저항을 사용합니다.


코드설명 


먼저 소스 제일 위에 const int로 각각 핀번호를 지정해주는 변수를 작성합니다.
버튼의 입력을 받을 핀을 2번핀으로 지정하고, 제어할 LED 핀을 13번으로 지정합니다. 아두이노 우노의 경우 13번 핀은 내장 LED와 연결되어 있습니다.

 const int buttonPin = 2; 
 const int ledPin = 13; 

버튼의 입력상태를 지정하는 변수를 작성합니다. 이 값은 버튼의 입력에 따라 변경되어야 하기에 변경하지 않는 const를 사용하지 않습니다.

 int buttonState = 0; 

setup()구문에서는 ledPinbuttonPin의 모드를 설정해줍니다. ledPin의 경우 출력모드, buttonPin의 경우 입력모드로 설정합니다.

 pinMode( ledPin, OUTPUT ); 
 pinMode( buttonPin, INPUT); 

loop()구문 내에서는 간단한 코드가 입력됩니다. 먼저, buttonStatedigitalRead()를 통해 읽어옵니다.

 buttonState = digitalRead(buttonPin); 

버튼의 상태를 읽어온 후, 해당 버튼의 상태에 따라 ledPin에 어떤 출력을 할지 결정하는 if문을 추가합니다.

 if ( buttonState == HIGH ) { 
//만약 buttonState가 HIGH라면
     digitalWrite(ledPin, HIGH); 
//ledPin의 출력을 HIGH
 } else { 
//그게 아니라면
     digitalWrite(ledPin, LOW); 
//ledPin의 출력을 LOW

/*
  Button

 Turns on and off a light emitting diode(LED) connected to digital
 pin 13, when pressing a pushbutton attached to pin 2.


 The circuit:
 * LED attached from pin 13 to ground
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground

 * Note: on most Arduinos there is already an LED on the board
 attached to pin 13.


 created 2005
 by DojoDave <http://www.0j0.org>
 modified 30 Aug 2011
 by Tom Igoe

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/Button
 */

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}

0 개의 댓글:

댓글 쓰기