こんばんは!
今回はArduinoの割り込み機能を使ってみようと思います。
概要
attachInterrupt関数を使用して、割り込み処理を行ってみる。
タクトスイッチを押すと点滅していたLEDの処理が中断され、圧電スピーカが1秒間音を鳴らす。
使用するもの
・Arduinoメインボード(https://amzn.to/2vkPIUH)
・USBケーブル(https://amzn.to/2UHhntl)
・ブレッドボード(https://amzn.to/38eNi8u)
・ジャンパワイヤ (https://amzn.to/39uBU8T)
・タクトスイッチ(https://amzn.to/3aVZe0k)
・LED(https://amzn.to/2TvEPGc)
・圧電スピーカ(https://amzn.to/2CkhvnO)
割り込み処理とは
外部から割り込みの命令を受けた際、実行している処理を中断して他のプログラムを実行することを割り込み処理といいます。
割り込み処理が終了後元のループに戻り、中断された処理のところから処理が再開されます。
時間ごとに決まった処理をするためや、これから起こりうる可能性のある要求を別の処理をしながら待機するときなどに使用されます。
Arduinoの割り込み処理として、割り込み処理関数「attachInterrupt」が存在するので、これを使用します。
手順
まず以下の図のように配線します。
これでハード側は終わりです。
次にArduino IDEを起動して次のコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | const int ledPin = 7; const int speakerPin = 9; void setup() { pinMode(2, INPUT_PULLUP); pinMode(7, OUTPUT); pinMode(9, OUTPUT); attachInterrupt(0, speaker, FALLING); } void loop() { digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); delay(500); } void speaker() { tone(speakerPin, 255, 1000); } |
このコードはスイッチを押してない状態ではLEDが0.5秒ごとに点滅しています。
スイッチを押したら割り込み処理によってspeaker()が呼び出されます。
speaker()ではtone関数により、圧電スピーカが1秒間音を鳴らします。
今回のプログラムはこれまで記事にした圧電スピーカ、LED、タクトスイッチのプログラムを利用して書いています。
詳しく知りたい方は参照してください。
マイコンボードに書き込んでスイッチを押すと以下の動画のように割り込み処理が行われていることがわかると思います。
まとめ
今回はinterrupt関数を使って割り込み処理を行ってみました。
割り込みはプログラムのなかで処理が自動的に行われるようにしたいときに便利です。
今回はこれで終わります。
ではまた!