반응형

안녕하세요!
녹칸다입니다!

녹칸다의 산업용 아두이노(fa-duino)의 빠른 내용 전달을 위해서 코드와 작동결과만을 별도로 정리해보도록 하겠습니다~!
녹칸다의 산업용 아두이노 3편에서 5번예제를 정리해보도록 하겠습니다~!

 

이번편에서는 라이브러리를 사용하지 않고 상승엣지와 하강엣지 사이의 시간을 측정해서 디바운스 처리를 해보도록 하겠습니다~~!

대략적인 원리는 아래와 같습니다~!

1.버튼의 상태가 HIGH이다, LOW이다의 정도만 취득가능하다!
2.지금부터는 falling edge와 rising edge를 검출해야 디바운스 처리가 가능하다!
3.버튼을 한번 누르면 상승엣지와 하강엣지가 순차적으로 출력된다!
4.상승엣지와 하강엣지 사이의 시간을 측정해서 기준이 되는 시간 미만이라면 처리하지 않도록 하는게 일종의 디바운스 처리이다!
5.버튼을 눌렀다가 뗄때 그러한 연산을 한다!(쉽고)
6.버튼을 누르고 있을때 그러한 연산을 한다!(어려움)

예제의 소스코드는 아래와 같습니다~!

//37번에 연결된 버튼에 디바운스 처리를 하시오!

bool old_btn = LOW;
unsigned long t = 0;

void setup() {
  Serial.begin(9600); //결과를 PC에 출력하겠다!
  pinMode(37,INPUT); //빨간버튼 
}
void loop() {
  bool now_btn = digitalRead(37);

  if(old_btn == LOW && now_btn == HIGH){
    //상승엣지
    t = millis(); //상승엣지의 시간을 저장한다!
  }else if(old_btn == HIGH && now_btn == LOW){
    //하강엣지
    if(millis() - t > 100){
      //사람이라면 눌럿다가 뗄때 이정도 시간이 걸릴것이다!
      Serial.println("버튼이 눌러졌습니다!");
    }
  }

  old_btn = now_btn;
}

예제의 실행결과는 녹칸다의 라이브방송중 해당위치를 링크걸도록 하겠습니다~~!

https://youtu.be/uXZTirk2SYw?t=3551 

 

반응형
Posted by 덕력킹
,