<목표>
- 아두이노 내부 회로에 내장되어 있는 풀업저항을 pinMode() 함수를 사용하여 설정하고, digitalRead() 함수를 사용하여 스위치 상태를 읽은 후 digitalWrite() 함수를 이용하여 LED를 제어한다.
<준비물>
- 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 브레드보드, led, 버튼(택트스위치)
<회로도>
<코드>
void setup() {
//start serial connection
Serial.begin(9600);
//configure pin 2 as an input and enable the internal pull-up resistor
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
}
void loop() {
//read the pushbutton value into a variable
int sensorVal = digitalRead(2);
//print out the value of the pushbutton
Serial.println(sensorVal);
// Keep in mind the pull-up means the pushbutton's logic is inverted. It goes
// HIGH when it's open, and LOW when it's pressed. Turn on pin 13 when the
// button's pressed, and off when it's not:
if (sensorVal == HIGH) {
digitalWrite(13, LOW);
} else {
digitalWrite(13, HIGH);
}
}
코드는 아두이노 - 파일 - 예제 - 02.Digital - DigitalInputPullup 의 예제 파일과 동일 합니다.
예제파일을 쓰셔도 되고, 위의 코드를 복사하여 붙여넣으셔도 됩니다.
<실행 결과>
버튼을 누르면 LED가 켜지고, 버튼을 떼면 LED가 꺼지는 결과를 확인할 수 있었다.
저번 강의인 #6 과 같은 결과이지만, 중간 내용이 다르다.
원래 버튼을 사용할 때에는 pull-up 과 pull-down 저항 회로로 2가지 방식이 존재한다.
여태 했던 방식은 가장 기본이 되는 pull-down 저항 회로였다.
버튼을 누르면 1(HIGH) 신호가 입력되고, 버튼을 떼면 0(LOW) 신호가 입력된다.
하지만 pull-up 은 반대의 구조이다.
위의 사진을 참고하자면
pull-down 에서는 버튼을 누르는 순간 5V(HIGH)가 2번핀으로 흐르게된다.
GND로 가고 싶지만 길목에 저항이 있다보니 2번핀으로 전류가 흐르는 것이다.
그리고 버튼에 손을 떼면 잔류 전류가 GND로 넘어가면서 깔끔하게 0V(LOW)로 입력을 받을 수 있는 것이다.
pull-up 에서는 버튼을 안 누르고 있으면 5V(HIGH)가 그대로 2번핀으로 흐르게 된다.
따라서 안누르고 있는 상태에서는 HIGH 신호를 입력받게 된다.
버튼을 누르게 되면, 길목에 저항이 없는 GND 핀으로 전류가 전량 흐르게 되면서
2번핀에는 0V(LOW) 가 읽히게 된다.
하지만 앞서 회로도에서 나타난 회로와 pull-up의 회로가 같지 않음을 볼 수 있다.
여기서 제공한 코드를 이용한다면 회로도에 올린 것과 같은 회로를 구성해야 한다.
이유는 아두이노 내부에는 각 핀에 pull-up 저항 회로가 내장되어 있기 때문이다.
이를 소프트웨어(코딩)를 통해 제어할 수 있다.
코딩에서 보면 새로운 설정이 있는데,
pinMode(2, INPUT_PULLUP);
위 명령이 새로운 설정이다.
pinMode 에서는 OUTPUT / INPUT / INPUT_PULLUP 으로 총 3가지 설정이 가능하다.
여기서 INPUT_PULLUP 을 선택하면 내부 풀업 저항을 이용하는 설정이 되는 것이다.
새롭게 아두이노를 공부하는 경우라면 풀다운/풀업 저항을 직접 회로를 구성해서 테스트해보고
아두이노의 INPUT_PULLUP 도 해보는 것을 추천한다.
코드의 내용은 앞선 강의들을 참고한다면 이해하는데 문제가 없으므로 생략한다.
※ 궁금하시거나 질문사항이 있으시면 댓글로 작성해주시면 답변해 드릴 수 있는 부분에서 친절히 답변드리겠습니다!
'코딩 > 아두이노' 카테고리의 다른 글
아두이노 업로딩이 안 된다면! 아두이노 호환보드 CH340&CH341 드라이버 설치! (0) | 2020.05.06 |
---|---|
[아두이노 강좌] 예제로 배우는 아두이노 #8 timer interrupt() 사용법, delay 없이 LED 제어하기 (4) | 2020.03.30 |
[아두이노 강좌] 예제로 배우는 아두이노 #6 , 스위치 버튼으로 led 제어하기 (0) | 2020.03.25 |
[아두이노 강좌] 예제로 배우는 아두이노 #5 analogWrite( ), 아두이노로 pwm 출력하기 (0) | 2020.03.25 |
[아두이노 강좌] 예제로 배우는 아두이노 #4 ReadAnalogVoltage, 아두이노로 전압측정하기 (2) | 2020.03.25 |
댓글