BASIC4MCU | 아두이노 | 아두이노 | 스위치 엣지 검출
페이지 정보
작성자 master 작성일2018-03-17 11:44 조회9,741회 댓글0건본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-03-17 오전 11:08:21// by Ok-Hyun Parkint buttonPin=8;int ledPin=13;//int old_key=0,new_key=0;//void setup(){pinMode(ledPin,OUTPUT);pinMode(buttonPin,INPUT_PULLUP);}//void loop(){new_key=digitalRead(buttonPin);if(old_key!=new_key){old_key=new_key;if(new_key==LOW){ // 하강엣지digitalWrite(ledPin,HIGH);}else{ // 상승엣지digitalWrite(ledPin,LOW);}}}old_key 변수를 하나 더 추가해서
if(old_key!=new_key){
두 변수가 달라졌을 때만 실행 합니다.
즉, 상승엣지와 하강엣지를 체크하기 위한 예제입니다.
엣지 검출은 중요한데요
키를 계속 누르고 있더라도 한 번만 실행 시킬 때 유용합니다.
회로에서는 누를 때 스위치가 0이 되도록 회로가 구성되어 있으므로
하강엣지만 사용하면 되겠습니다.
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-03-17 오전 11:13:17// by Ok-Hyun Parkint buttonPin=8;int ledPin=13;//int old_key=0,new_key=0;//void setup(){pinMode(ledPin,OUTPUT);pinMode(buttonPin,INPUT_PULLUP);}//void loop(){new_key=digitalRead(buttonPin);if(old_key!=new_key){old_key=new_key;if(new_key==LOW){ // 하강엣지digitalWrite(ledPin,!digitalRead(ledPin)); // LED 출력 토글}}}
digitalWrite(ledPin,!digitalRead(ledPin)); // LED 출력 토글
초보자라면 이 문장이 어렵겠습니다.
아두이노 우노나 메가처럼 AVR을 사용하는 보드는 출력을 읽을 수 있습니다.
digitalRead(ledPin)
LED 출력핀을 읽는 것이죠
!는 논리 부정연산자로서, 참은 거짓으로 바꾸고, 거짓은 참으로 바꿉니다.
1은 0으로 바꾸고, 0은 1로 바꾸므로
출력 상태가 토글(반전) 됩니다.
스위치 누를 때마다 출력이 변경 되는 것이죠
//
엣지 검출 방법은 이 예제 말고도 더 있습니다만
하나만 잘 알고 있어도 되겟죠
채터링에 의해서 여러번 동작하는 경우에는
104(0.1uF) 커패시터를 스위치에 병렬로 연결하는 것이 일반적입니다만
그래도 해결되지 않는다면
소스코드에 딜레이를 추가해주면 됩니다.
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-03-17 오전 11:55:13// by Ok-Hyun Parkint buttonPin=8;int ledPin=13;//int old_key=0,new_key=0;//void setup(){pinMode(ledPin,OUTPUT);pinMode(buttonPin,INPUT_PULLUP);}//void loop(){new_key=digitalRead(buttonPin);if(old_key!=new_key){delay(50); //채터링 방지용 딜레이old_key=new_key;if(new_key==LOW){ // 하강엣지digitalWrite(ledPin,!digitalRead(ledPin)); // LED 출력 토글}}}
스위치 종류나 상태에 따라서 딜레이 값을 더 큰 값으로 줘야지 채터링이 잡히기도 힙니다.
댓글 0
조회수 9,741등록된 댓글이 없습니다.