아두이노프로세싱 프로그래밍

초보자를 위한 아두이노 DigitalInputPullup 예제 NodeMCU 보드 적용

coding art 2017. 5. 25. 13:58
728x90

그림과 같이 Pull Up용 9K옴 저항과 스위치가 설치된 NodeMCU 보드에서의 INPUT 특성을 코딩을 통해 알아보자.

스위치가 OFF 된 상태에서 디지털 데이터 핀 D1(GPIO 5)은 3.3V 전압이 가해진 즉 HIGH 상태가 된다. 반면에 스위치 on이 되면 D1은 0V  전압 상태  즉 LOW로 바뀐다.



D1 디지털 핀에서의 입력 상태를 판독하기 위한 프로그램은 pinMode() 명령을 사용하여 D1 핀을 입력 즉 INPUT 으로 설정한 후 digitalRead() 명령을 사용하여 상태 값을 읽어 내도록 구성된다.

swPin 번호 5번은 NodeMCU의 D1 즉 GPIO 5 번 핀이며 ledPin 번호 2번은 빌트인 LED 핀 번

호이다.

pinMode()에서 swPin핀은 INPUT으로 ledPin은 OUTPUT으로 설정한다.

loop()문에서 digitalRead() 명령을 실행하여 swPin 핀의 디지털 데이터 값을 읽고 시리얼 모니터에 출력한다.
디지털 데이터 값이 HIGH 이면 ledPin을 LOW 로 두어 LED를 on 시킨다. 반면에 디지털 데이터 값이 LOW 이면 ledPin을 HIGH 로 두어 LED를 OFF 시킨다.








시리얼 플로터를 사용하여 스위치를 on OFF 하면서 INPUT 특성을 쉽게 관찰할 수 있다. 외부의 Pull Up 저항을 사용하는 시스템에서 바운스 효과는 전혀 나타나지 않았다.









현재의 배선에서 Pull Up 저항을 제거한 상태에서 INPUT_PULLUP 설정을 적용해 보자.


pinMode() 설정에서 INPUT을 INPUT_PULLUP 으로 변경하면 된다.
코드 실행 결과 시리얼 플로터 관찰에 의하면 INPUT 조건 때와 별 차이 없이 동작함을 확인할 수 있다.


NodeMCU 보드에서의 특이 사항은 D1,D2,D3,D4,D5,D6 핀에서만 INPUT 또는

 INMPUT_PULLUP 설정이 가능하며 나머지는 항상 LOW 이든지 HIGH 상태이다. 내부에 하드웨어적인 배선이 있으리라 추정된다.



NodeMCU_DigitalInput_01


int swPin = 15;
int ledPin = 2;

void setup() {
  Serial.begin(9600);
  pinMode(swPin, INPUT_PULLUP);
//  pinMode(swPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int sensorVal = digitalRead(swPin);
  Serial.println(sensorVal);

  if (sensorVal == HIGH) {
    digitalWrite(ledPin, LOW);
  } else {
    digitalWrite(ledPin, HIGH);
  }
}//끝