Arduino/Button

시간 간격을 통해 버튼을 누를 때마다 LED를 반전

DesignatedRoom 2020. 10. 22. 18:34

하드웨어를 다음과 같이 구성한다.

내부적으로 풀업 저항으로 세팅을 한다.

 

버튼을 누르자마자 반응을 하기 보다는, 버튼을 누른 적정 시간이 지나야 버튼을 누른 것으로 판정을 하도록 한다.

소스 코드

//  버튼을 누를 때마다 LED가 반전된다.
//  내부적으로 풀업 저항으로 세팅을 한다.

// 버튼 //
const int pin_switch = 7;             //  7번핀 스위치
const int button_interval = 500;      //  버튼 반응 속도 0.5초
long button_pressed_millis;           //  버튼 눌러진 시간을 밀리초로 저장하기 위한 변수

// LED //
const int pin_LED = 13;               //  13번핀 LED 출력

// 시간 //
long current_millis;                  // 현재 시간을 밀리초로 저장하기 위한 변수
bool isActive = false;
const int check_interval = 100;

void setup()
{
  //  입력 버튼, LED 초기화
  button_pressed_millis = 0;
  
  pinMode(pin_LED, OUTPUT); //LED 출력
  pinMode(pin_switch, INPUT_PULLUP); //스위치 입력(누르지 않으면 켜진상태로 유지)
}

void loop()
{
    current_millis = millis(); // 현재 시간 기록

    //  버튼을 특정 시간만큼 눌러야 누른 것으로 판단한다.
    //  버튼이 눌렸는지를 판단해서 눌렸다면
    if (digitalRead(pin_switch) == LOW && 
        current_millis-button_pressed_millis > button_interval) 
    {  
       button_pressed_millis = current_millis;  //  버튼이 눌린 시각을 저장
       isActive = (isActive) ? false : true;    //  상태 반전
    }
     
    if (isActive) { digitalWrite(pin_LED,HIGH);}
    else          {digitalWrite(pin_LED,LOW); }
     
    delay(check_interval);
  }