산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노로 delay() 없이 두 개의 LED를 서로 다른 속도로 깜빡이기

부품 및 소모품

아두이노 우노 (Arduino UNO) 1개
5mm 적색 LED 2개

프로젝트 개요

이 프로젝트는 온라인에서 자주 접하는 질문에서 영감을 얻었습니다. "두 개의 LED를 서로 다른 주기로 깜빡이려면 어떻게 해야 할까?"

첫 번째 LED를 1000ms마다, 두 번째 LED를 500ms마다 깜빡이고 싶다면 delay()를 사용해도 구현 가능합니다. 1000ms 딜레이를 두 번의 500ms로 쪼개면 되기 때문입니다. 하지만 두 번째 LED의 주기를 300ms로 바꾸고 싶다면? delay()로는 타이밍 계산이 극도로 복잡해지거나 불가능해집니다.

해결책: delay() 사용 중단

아두이노 IDE에 내장된 BlinkWithoutDelay 예제가 정답입니다. 이 방식을 두 번째 LED에도 동일하게 적용하고, 각각 원하는 간격(interval)을 설정하면 됩니다.

초보자를 위한 예제이므로 코드를 의도적으로 단순하게 작성했습니다. 더 효율적인 구조(배열, 구조체, 클래스 등)로 리팩토링할 여지는 충분합니다.

코드

const int ledPin = LED_BUILTIN;
int ledState = LOW;
unsigned long previousMillis = 0;
const long interval = 1000;

const int ledPin2 = 12;
int ledState2 = LOW;
unsigned long previousMillis2 = 0;
const long interval2 = 300;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin2, OUTPUT);
}

void loop() {
  unsigned long currentMillis = millis();

  // 첫 번째 LED (1000ms 간격)
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    ledState = (ledState == LOW) ? HIGH : LOW;
    digitalWrite(ledPin, ledState);
  }

  // 두 번째 LED (300ms 간격)
  if (currentMillis - previousMillis2 >= interval2) {
    previousMillis2 = currentMillis;
    ledState2 = (ledState2 == LOW) ? HIGH : LOW;
    digitalWrite(ledPin2, ledState2);
  }
}

회로도

내장 LED(핀 13)와 핀 12에 각각 LED를 연결합니다. 저항(220~330Ω)을 직렬로 연결하는 것을 권장합니다.

제조공정

  1. 알루미늄 부식 방지: 오래 지속되는 내구성을 위한 전문가 전략
  2. 초보자를 위한 클라우드 컴퓨팅 마스터 실전 가이드: 기초부터 시작
  3. C에서 C++ 전환이 임베디드 개발에 주는 3가지 이점
  4. 라즈베리 파이 4 웹 기반 실시간 온습도 모니터링
  5. 초보자 IoT 튜토리얼: 라즈베리 파이에서 온도 데이터 스트리밍하기
  6. ppDAQC Pi-Play트에서 InitialState로 실시간 온도 데이터 스트리밍 – 헤드리스 라즈베리 파이
  7. 라즈베리 파이 & 안드로이드 스마트폰으로 WiFi 제어 로봇 만들기
  8. Verilog 지연 제어 이해: 타이밍 기법과 모범 사례
  9. 톱 가공 개념의 기원: 고대 도구에서 현대 기계까지
  10. 회주철(Gray Cast Iron) 특성, 생산, 자동차 응용 분야 총정리