2021/12/02

Arduino: 複数のLEDを別々の周期やON/OFF比で点滅させる

概要

Arduinoに複数のLEDを接続したとき,LED毎に異なる周期で点滅させる方法です. また,この方法では点灯時間と消灯時間も個別に設定することが可能です.

実行例で使用しているソースコードでは,3つのLEDを下記のような設定で点滅させています.

番号 発光色 周期 [ミリ秒] 点灯時間 [ミリ秒] 消灯時間 [ミリ秒]
LED1 2000 1000 1000
LED2 1000 800 200
LED3 2000 500 1500

デモ

先に実行例をどうぞ.

開発環境

Arduino Arduino UNO R3互換ボード
Arduino IDE Arduino 1.8.13

回路

回路図

デジタルピン10番, 11番および12番にLEDを接続してください.なお,LEDはHIGH出力で消灯,LOW出力で点灯するように配線しているので注意してください. 逆にしたい場合は,ソースコードの14行目と15行目の定義を入れ替えます. Arduinoのピン配置については,公式Webページを参照してください.

回路部品

参考単価をクリックすると,秋月電子通商のページもしくはメーカーページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
R1, R2, R3 炭素皮膜抵抗 各社 1/4W 330Ω 3 1円 (互換品)
LED1 LED 各社 赤色 1 10円 (互換品)
LED2 LED 各社 橙色 1 20円 (互換品)
LED3 LED 各社 緑色 1 10円 (互換品)
その他 リード線など 適量

ソースコード

GitHub Gistにて公開します.

簡単にソースコードを説明します.

  • 17行目からLED点滅クラスを定義しています.このクラスで,各LEDの接続ピン,点灯時間,消灯時間,点灯状態および前回に点灯状態が変化した時刻を管理します
  • 58行目からはLED点滅クラスのコンストラクタです.各メンバ変数を設定し,LEDを消灯状態に初期化します.このときの時刻をmillis()で取得してm_prev_timeに保存します
  • 72行目からはLED点滅クラスの点灯状態を更新するメソッドです.millis()で取得した現在の時刻と前回に点灯状態が変化した時刻m_prev_timeの差分が点灯時間m_on_timeもしくは消灯時間m_off_timeを超過しているとき,点灯状態を更新します.
  • 108行目からのセットアップ関数で行う処理はありません
  • 115行目からのループ関数では,120行目付近で各LEDのインスタンスを作成しています.これらはstatic変数なのでプログラムの終了まで保持されます.126行目付近でupdate()メソッドを実行しており,毎ループでLEDの点灯状態を更新しています

ArduinoによるLED制御に関する記事

ArduinoによるLED制御を取り上げた,他の記事を紹介します.

製品紹介

0 件のコメント:

コメントを投稿