工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduinoでdelay()を使わずに2つのLEDを異なる速度で点滅させる方法

必要な部品

プロジェクト概要

オンラインで「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);
  }
}

回路図

Arduinoでdelay()を使わずに2つのLEDを異なる速度で点滅させる方法

この方法を使えば、delay()に頼らず、複数のタスクを並行して実行できます。センサー読み取りや通信処理など、他の処理をブロックせずにLED点滅を制御したい場合に必須のテクニックです。

製造プロセス

  1. Raspberry Pi 4でWeb経由リアルタイム温湿度モニタリング
  2. 初心者向けIoTチュートリアル:Raspberry Piから温度データをストリーミング
  3. ppDAQC Pi-PlateからInitialStateへ温度データをストリーミング - ヘッドレスRaspberry Piで実現
  4. Raspberry Pi & Android スマホで Wi-Fi 制御ロボットを構築
  5. 鋸挽き概念の起源:古代ツールから現代機械へ
  6. グレー鋳鉄の理解:特性、製造、自動車用途
  7. CNC旋盤の基礎と応用:構造・制御・工具・自動化で実現する高精度旋削加工
  8. アルミニウムの腐食対策:長寿命化のための専門的戦略
  9. CからC++への移行が組み込み開発を加速する3つの理由
  10. ゼロからマスターするクラウドコンピューティング:初心者のための実践ガイド
  11. Verilog遅延制御の理解:タイミング技術とベストプラクティス