LED ON/OFF
이번에는 스위치로 입력을 받아 LED를 켜보도록 하자
스위치는 가장 간단한 INPUT이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | int led = 7; int btn = 6; int state = 0; void setup() { pinMode(led, OUTPUT); pinMode(btn, INPUT); } // the loop function runs over and over again forever void loop() { state = digitalRead(btn); if (state == HIGH) { digitalWrite(led, HIGH); } else { digitalWrite(led, LOW); } } | cs |
소스코드는 다음과 같다.
처음 소스에서 버튼과 버튼의 상태를 나타내는 변수만 추가되었다.
setup에서는 입출력에 대한 설정이 완료되었다.(입력 - 7번핀, 출력 - 6번핀)
이후 loop를 돌며 조건문으로 버튼의 상태를 확인하여 led를 ON/OFF하게된다.
핀배치는 다음과 같다.
스위치는 다리가 4개이다.
각각의 다리는 대각선으로 연결이 되어있으므로 대각선 방향으로
한쪽은 Ground(0v), 한쪽은 Data pin(5v)을 연결해 주면 되겠다.
스위치는 또다른 고려사항이 있는데 바로 바운싱이다.
스위치의 접점이 닫히거나 열릴 때 아주 짧은 시간동안 접점이 닿히거나 열림으로 인해
노이즈가 발생한다.
이로 인해 원치 않은 인터럽트나 HIGH/LOW 변환이 발생하게 되고
스위치 인식에 장애가 생긴다.
이러한 바운싱을 잡아주는 것을 디바운싱이라고 하며
소프트웨어와 하드웨어적인 방법으로 해결할수 있다.
위의 회로는 하드웨어적인 디바운싱 방법이다. 캐페시터를 이용하여 충/방전되어
스위치의 바운싱을 잡아준다.
일단, 여기서는 바운싱의 고려 없이 스위치만으로 회로를 구현해 보았다.
실제로 회로를 구성했을때 LED가 잘 깜빡이는 것을 확인할 수 있다.
동영상 찍기전에 회로가 단순하여 노이즈를 잡아줄 수 없어서 그런지
많은 떨림이 관찰되었다.
캐패시터가 없어서 따로 회로를 구성하지 못하였지만 정확한 동작을 위하여
회로의 보강이 필요한 것 같다.
스위치 바운싱 출처 :
http://studymake.tistory.com/344
'개발' 카테고리의 다른 글
[Arduino] 시리얼 통신 (0) | 2017.04.19 |
---|---|
[Arduino] Interrupt 인터럽트 (0) | 2017.04.19 |
[Arduino] LED ON/OFF 1 (0) | 2017.04.19 |
[Arduino] Arduino IDE 설치 (0) | 2017.04.19 |
[Arduino] 아두이노란? (0) | 2017.04.19 |
댓글