AI Journey/혼자 공부하는 임베디드

[아두이노] 푸시버튼을 적용한 S.O.S 신호 점멸 구현

보눔비스타 2025. 6. 23. 22:15

어제 우리 프로젝트 팀의 첫 오프라인 미팅이 있었다. 플젝 진행 방향에 대한 논의가 끝나고 잠시 남아서 리더님에게 아두이노 푸시버튼 연결을 좀 도와달라고 했다. 지난 글에서 아두이노 내장 LED로 S.O.S 신호 깜빡이기 실습을 했는데, 이 때 사실 원래 목표는 루프로 계속 돌리지 않고, 버튼을 한 번 눌렀다 떼면 S.O.S 신호가 한 차례 점멸하도록 하는 것이었다. 

 

그런데 브래드보드에 푸시버튼과 점퍼와이어를 연결하는 방법을 제대로 몰라서 결국 이렇게 저렇게 시도하다가 포기했었는데, 어제 드디어 프로젝트 미팅에 가서 성공시켰다. (내가 한 건 아니고 리더님이 해주셨지만... ㅎㅎ)

 

우선 가장 중요한 회로를 다시 복기해 보도록 한다. 지난 포스팅에서 소개했던 팅커캐드를 이용해서 회로를 깔끔하게 정리해 보았다. 

 

사용한 코드는 다음과 같다. 

 

const int buttonPin = 2;      // 버튼 연결 핀
const int ledPin = 13;        // 내장 LED 핀

int buttonState = 0;
void dot() {
  digitalWrite(ledPin, HIGH);
  delay(250);
  digitalWrite(ledPin, LOW);
  delay(250);
}

void dash() {
  digitalWrite(ledPin, HIGH);
  delay(750);
  digitalWrite(ledPin, LOW);
  delay(250);
}

void sos() {
  // S: ...
  dot(); dot(); dot();
  delay(200);
  // O: ---
  dash(); dash(); dash();
  delay(200);
  // S: ...
  dot(); dot(); dot();
 
}

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);  // 내부 풀업 저항 사용
  pinMode(ledPin, OUTPUT);           // LED 핀을 출력으로 설정
}

void loop() {
  buttonState = digitalRead(buttonPin);

  if (buttonState == LOW) {
    // 버튼이 눌렸으면 LED ON
    sos();

  } else {
    // 버튼이 안 눌렸으면 LED OFF
    digitalWrite(ledPin, LOW);
  }
}

 

아래는 실제 동작하는 것을 촬영한 동영상이다.