BLUESINK

기본기:: GPIO

토픽 BLUESINK > MicroController > [2016] 아두이노

GPIO(General Purpose Input/Output)

 GPIO란 General Purpose Input/Ouput 의 줄임말로, 마이크로 컨트롤러의 핀을 입력 또는 출력 용도로 사용할 수 있게 하는 기능입니다. 기본적으로 아두이노는 5V 기준의 마이크로프로세서이며, 따라서 핀 헤더 소켓을 통해 0V 혹은 5V의 입/출력만이 가능합니다. 따라서 아두이노의 핀을 출력 모드로 설정하면 이 핀을 통해서 우리는 자유자재로 0V 혹은 5V 출력을 낼 수 있으며,  입력 모드로 설정하면 이 핀으로 들어오는 전압이 0V인지 5V인지 판단을 할 수 있습니다.

 

digitalWrite

 아두이노는 digitalWrite()라는 함수를 통해서 GPIO output 기능을 수행합니다. digitalWrite(pin numberHIGH)는 해당되는 핀에 5V를 출력하게 되고, digitalWrite(pin numberLOW)는 해당되는 핀에 0V를 출력하게 됩니다. 이 기능을 이용하여 일정 시간을 주기로 깜빡거리는 LED를 구현해 봅시다.

blink.ino 
int ledPin = 13;                 // LED connected to digital pin 13
 
void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}
 
void loop()
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
}

 

digitalRead

 GPIO의 input 기능은 digitalRead() 함수로 구현할 수 있습니다. digitalRead(pin number) 함수는 해당되는 핀에 0V가 걸리면 정수값 0을, 5V가 걸리면 정수값 1을 반환합니다. 이 기능을 이용하여 버튼으로 제어할 수 있는 LED를 구현해 봅시다.

digitalread.ino 
int ledPin = 13; // LED connected to digital pin 13
int inPin = 11;   // pushbutton connected to digital pin 11
int val = 0;     // variable to store the read value
 
void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin 13 as output
  pinMode(inPin, INPUT);      // sets the digital pin 11 as input
}
 
void loop()
{
  val = digitalRead(inPin);   // read the input pin
  digitalWrite(ledPin, val);    // sets the LED to the button's value
}

참고자료

댓글

댓글 본문
  1. LeeYuYeon
    저항과 그라운드가 존재하는 이유는 폐회로에서 전압강하가 존재해야 합니다. 폐회로에서 전압강하가 없다면 저항이 없다는 의미이고 I=V/R 여기서 R이 0에 수렴하므로 과전류가 흐를 수 있습니다.
    대화보기
    • Hyeonhak Kim
      좋은 포스트 감사드려요.
      초보라 궁금한 점이 있는데요.
      digitalRead 그림(회로도) 맨 오른쪽 거에서 저항과 그라운드 부분이 필요한 이유는...
      input 핀에 전압이 걸리게 해야하기 때문이라는 걸... 머리로는(?) 알겠는데
      뭔가 정확히 모르겠어요..
      저항과 그라운드 부분이 없다면 어떤 이유로 안될까요?
      5v에서 input 핀에 전류가 흐르면 high가 걸릴 수 없어서? ...
      정확한건 아두이노 내부 구성을 알아야 되려나요.ㅠ
    • 그런데 첫번째 캡쳐 사진을 보면
      LED의 음극에 13번 핀을 꽂고 양극에 GND를 연결했는데
      밑에 캡쳐사진에는 또 반대로 되어있네요.
      상관이 없나요?
    • HANS71
      정말 유용합니다. 초보자에게.. 감사합니다.
    • JustStudy
      고맙습니다
    • 네 그렇죠. 전류는 VCC 에서 GND로 흐르게 되는데 만약 GND가 연결되지 않으면 전류가 갈 곳이 없게 되니 흐르지 않게 됩니다!
      대화보기
      • 죠이
        답변 감사합니다.
        그러면 GND pin은 내부적으로 USB의 GND와 연결이 되어 있다는 말씀이시군요.
        GND를 연결하지 않으면 전류는 흐르지 않게 되는 건가요?
        대화보기
        • 이 led 예제에서 저항을 ground 쪽에 연결하는 것과 핀 쪽에 연결하는 것은 아무 차이가 없습니다! 다만 제가 습관상 그렇게 연결한 겁니다 ㅎㅎ. 그리고 현재 아두이노는 usb를 통해 컴퓨터로부터 전원공급을 받게 되는데, 이 경우 아두이노의 ground는 usb 단자를 통해 컴퓨터의 ground와 연결이 되어지게 되는 것입니다. 따라서 led로 흘러가는 전류는 결과적으로 연결된 컴퓨터로 흘러가게 됩니다. 만약 컴퓨터가 콘센트에 연결되어있다면 그 전류는 다시 콘센트를 타고 흘러갈 것이고, 배터리에 연결되어있다면 배터리로 흘러 들어가겠죠?
          대화보기
          • 죠이
            저항을 Ground 로 가는 쪽에 연결해야만 하나요?
            +로 들어오는 앞에 저항을 달아도 되는 거에요?
            그리고, GND pin은 내부적으로 어떻게 되어 있나요? 흘러가는 전류가 GND pin으로 들어가서 사라지는 원리가 뭐죠?

            너무 초보적인 질문이라 죄송합니다.