Arduinoでdelay()を使わずに2つのLEDを異なる速度で点滅させる方法
必要な部品
- Arduino UNO ×1
- 5mm 赤色LED ×2
プロジェクト概要
オンラインで「2つのLEDを異なる速度で点滅させるにはどうすればいいか?」という質問を見かけたことから、このプロジェクトが生まれました。
例えば、LED1を1000ミリ秒ごと、LED2を500ミリ秒ごとに点滅させたい場合、delay()を使っても以下のように書けます。
byte LED2 = 12;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(LED2, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(LED2, HIGH);
delay(500);
digitalWrite(LED2, LOW);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(LED2, HIGH);
delay(500);
digitalWrite(LED2, LOW);
delay(500);
}
しかし、LED2を300ミリ秒ごとに点滅させたい場合など、delay()を使うとタイミング調整が非常に複雑になり、実質不可能に近くなります。
解決策はシンプルです:delay()を使わないことです。
Arduino IDEには「BlinkWithoutDelay」という標準例題が用意されています。このロジックを2つ目のLED用に複製し、それぞれ任意の間隔を設定すれば、複数のLEDを独立したタイミングで制御できます。
初心者向けの解説のため、コードはあえてシンプルな構造にしています。より洗練された書き方(配列や構造体を使うなど)もありますが、まずは基本を理解してください。
サンプルコード
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();
// LED1の制御
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
ledState = (ledState == LOW) ? HIGH : LOW;
digitalWrite(ledPin, ledState);
}
// LED2の制御
if (currentMillis - previousMillis2 >= interval2) {
previousMillis2 = currentMillis;
ledState2 = (ledState2 == LOW) ? HIGH : LOW;
digitalWrite(ledPin2, ledState2);
}
}
回路図

この方法を使えば、delay()に頼らず、複数のタスクを並行して実行できます。センサー読み取りや通信処理など、他の処理をブロックせずにLED点滅を制御したい場合に必須のテクニックです。
製造プロセス
- Raspberry Pi 4でWeb経由リアルタイム温湿度モニタリング
- 初心者向けIoTチュートリアル:Raspberry Piから温度データをストリーミング
- ppDAQC Pi-PlateからInitialStateへ温度データをストリーミング - ヘッドレスRaspberry Piで実現
- Raspberry Pi & Android スマホで Wi-Fi 制御ロボットを構築
- 鋸挽き概念の起源:古代ツールから現代機械へ
- グレー鋳鉄の理解:特性、製造、自動車用途
- CNC旋盤の基礎と応用:構造・制御・工具・自動化で実現する高精度旋削加工
- アルミニウムの腐食対策:長寿命化のための専門的戦略
- CからC++への移行が組み込み開発を加速する3つの理由
- ゼロからマスターするクラウドコンピューティング:初心者のための実践ガイド
- Verilog遅延制御の理解:タイミング技術とベストプラクティス