-
시간 간격을 통해 버튼을 누를 때마다 LED를 깜빡이게 하기Arduino/Button 2020. 10. 22. 18:49
아래의 내용을 이용해서 구현한다.
designatedroom87.tistory.com/220
시간 간격을 통해 버튼을 누를 때마다 LED를 반전
하드웨어를 다음과 같이 구성한다. 내부적으로 풀업 저항으로 세팅을 한다. 버튼을 누르자마자 반응을 하기 보다는, 버튼을 누른 적정 시간이 지나야 버튼을 누른 것으로 판정을 하도록 한다
designatedroom87.tistory.com
소스 코드
// 버튼 // const int pin_switch = 2; // 4번핀 스위치 const int button_interval = 500; // 버튼 반응 속도 0.5초 long button_pressed_millis; // 버튼 눌러진 시간을 밀리초로 저장하기 위한 변수 // LED // const int pin_LED = 13; // 13번핀 LED 출력 long led_switching_time; // LED 상태 변경 시간 const int led_blinking_interval=500; // LED 깜빡이는 간격 bool led_status; // LED 상태 // 시간 // long current_millis; // 현재 시간을 밀리초로 저장하기 위한 변수 bool isActive = false; const int check_interval = 100; void setup() { // 입력 버튼, 모터, LED 초기화 button_pressed_millis = 0; led_switching_time = 0; led_status = false; pinMode(pin_LED, OUTPUT); // LED 출력 pinMode(pin_switch, INPUT_PULLUP); // 스위치 입력(누르지 않으면 켜진상태로 유지) } void loop() { current_millis = millis(); //현재 시간 기록 // 버튼이 눌려질때는 0의 신호가 들어오기 때문에 pin_switch가 눌려질때는 LOW일 때 이다. // 프로그램 시작 시간이 버튼을 누른시간이 0.5초 앞선 경우 시작할 수 있음 // 만약 버튼이 눌러지고 버튼 인터벌보다 시간이 더 지났다면 아래를 실행 if (digitalRead(pin_switch) == LOW && current_millis-button_pressed_millis> button_interval) { button_pressed_millis = current_millis; isActive = (isActive) ? false : true; //상태 반전 //버튼이 눌려졌을 경우 현재 동작 상태에 대한 반전 상태가 됨 //예를 들어 isActive가 true인 경우 false, isActive가 false인 경우 true } if (isActive) { // 만약 isActive가 true인 경우 거리 각도를 측정해 모터 진동을 하는 함수를 호출함 blink_led(true); } else { // isActive가 false라면 모터를 끄고 LED를 끔 blink_led(false); } delay(check_interval); } // LED를 깜빡이게 하는 함수, 이함수를 호출하면 LED가 꺼졌다 켜졌다 함. void blink_led(bool blink_ok) { if (!blink_ok) { digitalWrite(pin_LED, LOW); return; } if (current_millis - led_switching_time > led_blinking_interval) { led_status = (led_status) ? false : true; } digitalWrite(pin_LED, led_status); }
'Arduino > Button' 카테고리의 다른 글
버튼과 인터럽트 (0) 2020.10.23 시간 간격을 통해 버튼을 누를 때마다 LED를 반전 (0) 2020.10.22 Pull down & Pull up 저항 (0) 2020.10.22 버튼 누른 회수 구하기 (0) 2020.10.22 버튼 제어 (0) 2020.10.21