2015年08月02日

割り込み処理 -第2回:作成

前回は割り込み処理について説明しました。今回は実際にArduinoの割り込み処理を使ってみます。


目次



1. Arduinoでの割り込み処理

Arduinoで割り込み処理を行うにはattachinterrupt()関数を使います。この関数ではピンに接続された信号が変化したときに割り込み発生させることができます。Arduinoの外部からの信号で割り込みを行いますので、外部割り込みといいます。
attachinterrupt()関数を使うには3つのパラメータを与えます。

attachInterrupt(interrupt, ISR, mode)
  1. interrupt(割り込みに使うピン)
  2. ISR(割り込み発生で呼び出す関数)
  3. mode(割り込み発生の条件)

1. interrupt(割り込みに使うピン)

interruptでは割り込みに使うためのピンを指定します。
ただし、割り込みには全てのピンが使えるわけではありません。Arduino Unoの場合は割り込みに使えるピンは2ピンか3ピンです。使うピンの指定はピン番号ではなく割り込み番号(番号0=ピン2、番号1=ピン3)で指定します。

2. ISR(割り込み発生で呼び出す関数)

ISRでは割り込み時に行いたい処理の関数を指定します。
なお、割り込み用の関数で扱う変数を宣言する際はvolatileという修飾子を付け加える必要があります。

例)volatile int state = LOW;

3. mode(割り込み発生の条件)

modeではピンの信号がどのように変化したときに割り込みを発生させるかを指定します。
Arduino Unoの場合、割り込み発生の条件は以下の4通りの中から選択できます。

1.LOW
:信号がLowの間は常に割り込み発生
 割り込み処理を終えたら、また割り込み処理を繰り返す
2.CHANGE:信号が変化したとき(立ち上がり、立ち下がりどちらも)に割り込み発生
3.RISING:信号が立ち上がり変化したときに割り込み発生
4.FALLING:信号が立ち下がり変化したときに割り込み発生

31_割り込み条件.png


ピン、関数、変化条件、Arduinoで割り込みを行うにはこれら3つパラメータを決めればよいです。
例えば、2ピン(割り込み番号0)の信号の立ち上がり変化blink()関数を割り込ませたいときは以下のように書きます。

例)attachInterrupt(0, blink, RISING);


2. 作るものを決める

スイッチを押す度にLEDが消灯と点灯を切り替えるものを作ります。
「スイッチが押された」を割り込み発生条件、「LEDの消灯と点灯を切り替える」を割り込み処理とします。


3. 回路

回路はプルアップスイッチ回路とLEDを組み合わせます。
注意するのはスイッチを割り込み可能なピンと接続することです。今回は2ピンと接続しました。

31_attachinterrupt_schem.png

31_attachinterrupt_bb.png

IMG_8365.jpg


4. スケッチ

作成したスケッチを以下にアップロードしています。(本来の拡張子は「.ino」ですが、「.txt」に書き換えています)

スケッチの内容は次の通りです。2. 作るものを決めるの内容とほぼ同じです。

1.割り込みの条件:2ピンの信号の立ち上がり変化で、blink()関数を実行する
2.Blink関数の動作:LEDが消灯ならば点灯、点灯ならば消灯に切り替える。


5. 動作

これが実際に動かしている映像です。ただしこれは失敗しています。


やりたいことはスイッチを押したときのみLEDが切り替わることなのですが、実際はスイッチを離したときもLEDが切り替わっています。これはチャタリングが原因ですので、チャタリング対策をする必要があります。


次回はチャタリング対策を行い、これを完成させます。


参考資料

  1. 作者名:Arduino. ページ名:"attachInterrupt()". サイト名:Arduino. URL:https://www.arduino.cc/en/Reference/AttachInterrupt, (参照日: 2015-08-01)


Arduinoをはじめよう第2版 [ マッシモ・バンジ ]

価格:2,160円
(2015/8/2 09:37時点)




posted by ました at 09:37| Comment(0) | TrackBack(0) | 電子工作の実践 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。