?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

Debounce에 대해 문의 드립니다.

페이지 정보

작성자 박카스 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일16-03-17 15:08 조회1,057회 댓글3건

본문

안녕하세요?^^

아두이도 IDE에서 기본으로 제공하는 Debounce 예제입니다.

버튼을 눌러 LED를 켜고 끄는 예제입니다.

한번 누르면 LED가 켜지고, 한번 더 누르면 꺼지는 방식입니다.

짧은 시간에 버튼이 여러번 눌러지는걸 방지하고자 시간을 체크해 입력 받는 방식인데요....

 

이 소스 마지막 2줄을 if 문 안에 넣을 수 있는 방법이 있을까요?

여러가지로 시도해봤는데 잘 안되네요....ㅜ.ㅜ

조언 부탁드립니다.

 

const int buttonPin = 2;
const int ledPin = 13; 


int ledState = HIGH;
int buttonState;
int lastButtonState = LOW;

long lastDebounceTime = 0;
long debounceDelay = 50;

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, ledState);
}

void loop() {
  int reading = digitalRead(buttonPin);

  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {

    if (reading != buttonState) {
      buttonState = reading;

      if (buttonState == HIGH) {
        ledState = !ledState;
      }
    }
  }

  digitalWrite(ledPin, ledState);
  lastButtonState = reading;
}

 

댓글목록

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일

제 생각에는 아래와 같은 구조로 짜는게 어떨까 싶네요

if( isPressed )    // 버튼이 눌러진 상태이면
    if( isFirstTime )    // 이전에 처리한 적이 없으면
        changeLED()    // LED 상태 변경
        isFirstTime = false

else    // 버튼이 release 된 상태이면
    isFirstTime = true

박카스님의 댓글

박카스 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

답변 감사합니다^^
작성해주신 내용은 버튼을 누르고 있는 상태와 떼고있는 상태로 작성하신듯 합니다.
제가 질문드린 내용은 버튼을 한번 눌렀다 떼면 LED가 켜지고, 한번 더 누르면 LED가 꺼지는 형태입니다.