概要
Arduinoに接続されたタクトスイッチ(ボタンスイッチ)が4回押下されたときにLEDを点灯させて,さらにもう1回,合計5回押下されたときにLEDを消灯させて初期状態に戻るという処理を繰り返すプログラムを紹介します. ボタンスイッチの押下判定方法などの参考になれば幸いです.
デモ
先に実行例をどうぞ.
開発環境
Arduino | Arduino UNO R3互換ボード |
---|---|
Arduino IDE | Arduino 1.8.13 |
回路
回路図
デジタルピン2番にボタンスイッチを接続してください.なお,ボタンスイッチはActive Lowとしています.つまり押しているときはLOW,離しているときはHIGHです. デジタルピン12番にLEDを接続してください.なお,LEDはHIGH出力で消灯,LOW出力で点灯するように配線しているので注意してください. LEDをHIGH出力で点灯,LOW出力で消灯にしたい場合は,ソースコードの19行目と20行目の定義を入れ替えます. Arduinoのピン配置については,公式Webページを参照してください.
回路部品
参考単価をクリックすると,秋月電子通商のページもしくはメーカーページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.
番号 | 部品名 | 型番 | 数量 | 参考単価 |
---|---|---|---|---|
R1 | 炭素皮膜抵抗 | 各社 1/4W 10kΩ | 1 | 1円 (互換品) |
SW1 | ボタンスイッチ | 各社 | 1 | 10円 (互換品) |
R2 | 炭素皮膜抵抗 | 各社 1/4W 330Ω | 1 | 1円 (互換品) |
LED1 | LED | 各社 赤色 | 1 | 10円 (互換品) |
その他 | リード線など | 適量 |
ソースコード
GitHub Gistにて公開します.
簡単にソースコードを説明します.
タクトスイッチについては20ミリ秒周期(INTERVAL_TIME)で状態(sw_val[SW_VAL_CURR])を取得し,前回の状態(sw_val[SW_VAL_PREV])も使用して状態が変化したことを検出します.
タクトスイッチの押下回数(sw_count)が4回になったとき,LEDを点灯します.
タクトスイッチの押下回数(sw_count)が5回以上になったとき,LEDを消灯します.
ArduinoによるLED制御に関する記事
ArduinoによるLED制御を取り上げた,他の記事を紹介します.
- Arduino: 複数のLEDを別々の周期やON/OFF比で点滅させる
- Arduino: タクトスイッチが押されたらLEDを5回点滅させる
- Arduino: タクトスイッチ押下を外部割込みで検出し,LEDの点滅方向を切り替える