최근에 소프트웨어 경진대회 프로젝트를 하다가 진동 모터를 하나 얻어오게 되었다.
진동 모터를 가지고 어떤 실습을 해볼까 하다가, 아두이노에 진동 모터, LED, 버튼을 연결하여 버튼을 한 번 눌렀다 떼면 3초 동안 LED가 밝아졌다가 어두워지면서 동시에 진동 모터가 울리는 프로그램을 만들어 보기로 했다.
그런데 한 가지 의문이 생겼다.
아두이노 프로그램은 기본적으로 초기 설정을 하는 setup() 함수가 한 번 실행된 후에는 loop() 함수를 무한 반복 실행한다.
그런데 바로 그 '반복 실행'이라는 점이 약간 이해가 되지 않았다.
내가 지금 만들고자 하는 프로그램은 버튼을 한 번 릴리즈하면 진동과 LED가 3초 동작하고 끝나는 프로그램으로, 반복 동작이 없다.
그런데 이걸 왜 setup() 함수가 아닌 loop() 함수에 넣지?
그런데 이렇게 생각하는 건 너무 1차원적인 접근이었다... ㅎㅎ
우선 내 프로그램은 3가지 목표를 동시에 달성해야 한다.
1. 버튼을 누르는 것을 계속 감지
2. 버튼을 누르면 3초 동안 진동 모터를 켜야 함
3. 버튼을 누르면 3초 동안 LED를 페이드 인/아웃 시켜야 함
그러니까 나는 2, 3번만 생각하고 1번에 대해서는 생각을 못한거다... 버튼을 누르는 동작을 한 번 인식하는 것만 생각했지, 버튼이 눌리는 것을 계속해서 감지해야 한다는 생각을 못했다.
만약 loop() 함수를 통해 버튼 눌림을 지속적으로 감지하지 않고, 버튼을 한 번 눌렀다 떼는 동작만 코드에 작성하게 되면, 아두이노는 버튼이 눌렸다가 떼어지는 순간을 단 한번만 처리하고, 그 이후에는 버튼을 눌러도 반응을 하지 않을 것이다.
어떻게 이 생각을 못했는지 ㅋㅋㅋ 역시 나는 아직도 한참 멀었다...
이 프로그램에 대한 코드와 회로 디자인, 실행 결과는 별도의 포스팅에서 자세히 다루도록 하겠다.

'Journey to CS > 임베디드' 카테고리의 다른 글
| 아두이노에서 어떤 정수 타입을 써야 할까? 데이터 타입 비교표 한 눈에 보기 (2) | 2025.08.13 |
|---|---|
| [아두이노] millis() 타이머 함수로 진동모터와 LED 동시에 작동시키기 (1) | 2025.07.27 |
| 아두이노에 PWM을 적용해서 LED에 페이드 인 & 페이드 아웃 효과 주기 (1) | 2025.07.17 |
| ESP32 시뮬레이터 - WOKWI 소개 (2) | 2025.06.24 |
| [아두이노] 푸시버튼을 적용한 S.O.S 신호 점멸 구현 (0) | 2025.06.23 |