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);
}