2016年03月04日

serialEvent(割り込みに失敗)

はじめに

今回はシリアル受信時に割り込み処理を行う予定でしたが、出来ませんでした。ですので文字表示器は前回から進展はないですが、やりかたったことや分かったことなどをまとめておきます。
 

目次

 

1. やりたかったこと

文字表示器は前回の時点で動いており、そのスケッチの動作を簡単に説明すると図1のような動きをしています。
 
 
Mar03_シリアル割り込み_1.png
図1 文字表示器の動作
 
シリアル受信に関する処理とスクロール処理を繰り返しています。
シリアル受信後に次の表示が更新されるまでの時間が短くなるよう、スクロール処理を行っている最中にシリアル受信が発生した場合はスクロール処理を中断してシリアル受信処理を実行します。
ただ、この方法だとスクロール処理を行っている最中にスクロールとは関係ないシリアル受信のチェックを行わないといけないので、無駄な処理が増えるような気がします。
 
そこでシリアル受信で割り込みを行うことができれば、無駄な処理を減らせると考えました。
 
Mar03_シリアル割り込み_2.png
図2 割り込み処理による文字表示器の動作
 
シリアル受信にて割り込みが発生したときにシリアル受信処理を行うようにすれば、スクロール中にシリアル受信をチェックしなくて済むと考えました。
 

2. serialEvent

ArduinoにはserialEvent()というシリアル受信が発生したときに処理を行う機能があります。この機能を使えばシリアル受信で割り込み処理を行えると思っていたのですが、それは勘違いで、serialEvent()が実行されるのはloop()文の処理が終わってからです。ですので割り込み処理のように、即座に処理を行うことが出来ません。
 
Mar03_シリアル割り込み_3.png
図3 serialEvent()による文字表示器の動作
 
文字表示器のスケッチをserialEvent()を使うよう書き換えたとしても、結局は図1と同じようにスクロール中にシリアル受信をチェックする必要があります。ですので、わざわざserialEventで書き換えてもArduinoの動きは書き換える前と同じです。
 

まとめ

serialEvent()を使えばシリアル受信で割り込みができると思っていましたが、それは勘違いでした。
Arduinoでもシリアル受信で割り込みはできなくもないようですが、難しそうなので今後の課題にしたいと思います。
 

参考資料

  1. 作者名:Arduino. "serialEvent". サイト名:Arduino. https://www.arduino.cc/en/Reference/SerialEvent, (参照日:2016-03-04)



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

メールアドレス:

ホームページアドレス:

コメント:

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

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

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