[아두이노] 아두이노의 pinMode()에서 INPUT과 INPUT_PULLUP의 차이

아두이노의 pinMode()에서 INPUT과 INPUT_PULLUP의 차이

아두이노의 digital I/O핀을 사용하려면 먼저 pinMode() 함수로 각각의 핀을 입력 또는 출력 모드로 사용하겠다고 먼저 선언해 줘야 한다.
그런데 입력으로 사용하는 경우 'INPUT'과 'INPUT_PULLUP' 두가지를 선택할 수 있다.
INPUT_PULLUP의 경우 프로세서 내부에 있는 pull-up 저항을 사용하겠다는걸 알려주는 것이다.

일반적으로 아두이노에 스위치를 연결하는 경우를 생각해 보자. 보통 아래 그림과 같이 외부에 pull-up 저항을 연결해 주는것이 보통이다. 하지만 ATmega168/328의 각 I/O 핀에는 노란색 부분의 회로가 들어있다. 하지만 디폴트는 노란색 부분을 사용하지 않게 되어 있다.

pinMode(7, INPUT); 
Untitled.png

그래서 INPUT 대신 INPUT_PULLUP을 사용하면 녹색 부분을 사용하게 되어 외부에 별도의 pull-up 저항을 붙이지 않아도 된다. (그림을 보면 알겠지만 아두이노 바깥쪽에 있던 저항이 아두이노 안쪽으로 들어간 것 뿐이다.)

pinMode(7, INPUT_PULLUP);

Untitled%2B2.png

이렇게 하면 외부에 연결해야 하는 부품이 줄어들고 배선도 간단해진다.

아래는 INPUT_PULLUP으로 두개의 스위치를 연결해 LED 깜빡이는 속도를 조절하는 예제이다.

IMG_2244.JPG

사진에서 볼 수 있는것 처럼 외부 저항이 없어 케이블이 훨씬 간편해졌다.

#define SW1  8
#define SW2  9
#define LED  13

boolean gLedStat = HIGH;
int gSpd = 500;

void setup() {
  pinMode(SW1, INPUT_PULLUP);
  pinMode(SW2, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
  Serial.begin(115200);
}

void loop() {
  static unsigned long last = 0;
  static unsigned long lastSw = 0;
  unsigned long now = millis();
  static boolean prev1 = HIGH;
  static boolean prev2 = HIGH;
  boolean cur;

  if ((now - lastSw) >= 10) {   // Check switch for every 10ms
    cur = digitalRead(SW1);
    if ((HIGH == prev1) && (LOW == cur)) {
      gSpd -= 100;
      gSpd = constrain(gSpd, 100, 2000);
      Serial.print("Delay up to ");
      Serial.println(gSpd);
      prev1 = LOW;
    } else if ((LOW == prev1) && (HIGH == cur)) {
      prev1 = HIGH;
    }
    cur = digitalRead(SW2);
    if ((HIGH == prev2) && (LOW == cur)) {
      gSpd += 100;
      gSpd = constrain(gSpd, 100, 2000);
      Serial.print("Delay down to ");
      Serial.println(gSpd);
      prev2 = LOW;
    } else if ((LOW == prev2) && (HIGH == cur)) {
      prev2 = HIGH;
    }
    lastSw = now;
  }
  if ((now - last) >= gSpd) {
    gLedStat = !gLedStat;
    digitalWrite(LED, gLedStat);
    last = now;
  }
} 
0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
52 아두이노 [강좌] 51. 와이파이 통신 (5) - WebServer 예제 (2) icon 양재동메이커 03-21 19,474
51 아두이노 [강좌] 50. 와이파이 통신 (4) - WebServer 예제 icon 양재동메이커 03-21 19,540
50 아두이노 [강좌] 49. 와이파이 통신 (3) - WebClient 예제 icon 양재동메이커 03-21 23,200
49 아두이노 [강좌] 48. 와이파이 통신 (2) - 커맨드 모드 사용하기 (WiFly 쉴드) icon 양재동메이커 03-20 18,183
48 아두이노 [강좌] 47. 와이파이 통신 (1) - 와이파이란 무엇인가 icon 양재동메이커 03-20 23,026
47 아두이노 [강좌] 46. 블루투스 통신 (5) - 프로토콜 만들기 (2) icon 양재동메이커 03-20 18,058
46 아두이노 [강좌] 45. 블루투스 통신 (4) - 프로토콜 만들기 (1) icon 양재동메이커 03-20 19,377
45 아두이노 [강좌] 44. 블루투스 통신 (3) - RN42 모듈에서 직접 접속하기 icon 양재동메이커 03-20 16,287
44 아두이노 [강좌] 43. 블루투스 통신 (2) - 스마트폰과 통신하기 icon 양재동메이커 03-20 18,525
43 아두이노 [강좌] 42. 블루투스 통신 (1) - RN42 블루투스 모듈 실습하기 icon 양재동메이커 03-20 20,751
42 아두이노 [강좌] 41. 서보 모터 (2) - Servo 함수 알아보기 icon 양재동메이커 03-20 21,982
41 아두이노 [아두이노 강좌] 40. 서보 모터 (1) - 서보 모터 동작 방식 icon 양재동메이커 03-20 22,580
40 아두이노 [강좌] 39. 스텝 모터 (3) - 모터 드라이버 EasyDriver(A3967) 사용하기 icon 양재동메이커 03-20 17,959
39 아두이노 [강좌] 38. 스텝 모터 (2) - Stepper 함수 알아보기 icon 양재동메이커 03-20 22,094
38 아두이노 [강좌] 37. 스텝 모터 (1) - 스텝 모터 동작 방식 icon 양재동메이커 03-20 18,939
37 아두이노 [강좌] 36. DC 모터 (2) - DC 모터 드라이버 실습하기 (TB6612FNG) icon 양재동메이커 03-20 18,046
36 아두이노 [강좌] 35. DC 모터 (1) - DC 모터 동작 방식 icon 양재동메이커 03-20 20,867
35 아두이노 [강좌] 34. SPI 통신 (3) - 기압 센서(MPL115A1) 실습하기 icon 양재동메이커 03-20 17,290
34 아두이노 [강좌] 33. SPI 통신 (2) – SPI 함수 알아보기 icon 양재동메이커 03-20 25,695
33 아두이노 [강좌] 32. SPI 통신 (1) - SPI 통신이란 무엇인가 icon 양재동메이커 03-20 30,050