概要
Arduinoに4個のLEDを接続し,このうち1個のみを順番に点灯させます. LEDの点灯順序は左方向または右方向で,タクトスイッチを押下することで方向が切り替わります. タクトスイッチの押下は,立ち下がりエッジで外部割込みを発生させて検出します.
初期点灯順序 | 右方向 |
---|---|
点滅周期 [ミリ秒] | 1000 |
デモ
先に実行例をどうぞ. LEDは左から順に,ソースコード上のLED4,LED3,LED2,LED1です. 黒色のタクトスイッチがSW_PINに接続されています.
開発環境
Arduino | Arduino UNO R3互換ボード |
---|---|
Arduino IDE | Arduino 1.8.13 |
回路
回路図
デジタルピン9番, 10番, 11番および12番にLEDを接続してください.なお,LEDはHIGH出力で消灯,LOW出力で点灯するように配線しているので注意してください. 逆にしたい場合は,ソースコードの82行目の定義の0と1を入れ替えます. Arduinoのピン配置については,公式Webページを参照してください.
回路部品
参考単価をクリックすると,秋月電子通商のページもしくはメーカーページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.
番号 | 部品名 | 型番 | 数量 | 参考単価 |
---|---|---|---|---|
R1 | 炭素皮膜抵抗 | 各社 1/4W 10kΩ | 1 | 1円 (互換品) |
SW1 | タクトスイッチ | 各社 | 1 | 10円 (互換品) |
R2, R3, R4, R5 | 炭素皮膜抵抗 | 各社 1/4W 330Ω | 4 | 1円 (互換品) |
LED1, LED2, LED3, LED4 | LED | 各社 赤色 | 4 | 10円 (互換品) |
その他 | リード線など | 適量 |
ソースコード
GitHub Gistにて公開します.
簡単にソースコードを説明します.
- 38行目の関数はタクトスイッチ押下による外部割込み発生時に実行され,LEDの点滅方向を切り替えます.チャタリング対策として外部割込み処理の前回実行時刻を変数sw_prev_timeに格納しておき,その時刻から変数sw_ineffective_time以上の時間が経過していた場合のみにLEDの点滅方向が切り替わります
- 61行目はLEDの点滅状態を更新する関数です.変数ledsの下位4bitがLEDが接続されたデジタルピンの状態を示しており,この状態をdigitalWrite()関数で各デジタルピンに反映しています
- 74行目が外部割込み処理の設定です.詳細は,公式Webページを参照してください.第1引数はINT.0,デジタルピン2番を示します.第2引数では割込み発生時に実行する関数を指定します.第3引数は割込み発生のトリガーを指定するもので,今回は立ち下がりエッジです
ArduinoによるLED制御に関する記事
ArduinoによるLED制御を取り上げた,他の記事を紹介します.
- Arduino: 複数のLEDを別々の周期やON/OFF比で点滅させる
- Arduino: タクトスイッチが押されたらLEDを5回点滅させる
- Arduino: スイッチ押下4回目でLEDを点灯させて,押下5回目でLEDを消灯させる
0 件のコメント:
コメントを投稿