-
시간 간격을 통해 버튼을 누를 때마다 LED를 깜빡이게 하기Arduino/Button 2020. 10. 22. 18:49
아래의 내용을 이용해서 구현한다.
designatedroom87.tistory.com/220
소스 코드
// 버튼 // 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