Arduino、割り込みとI2C接続のLCDディスプレイ

戻る

HOMEに戻る

Arduinoの割り込みを用いたスケッチについて。

割り込みルーチンの中で、I2CLCDへ書き込みをしようとすると、とても奇妙なことが起こった。

setup の前に #include <I2CLCD.h> をしておく。void setup() {  } のなかで、I2CLCD.begin(32); をしておく。attachInterrupt(0, intpros0, CHANGE); のように割り込みの準備をしておく。割り込み処理を準備しておく。void intpro0(){ } 。この{ }の中に、tone(snd,600,1000);  その下にI2CLCD.print(" "); のようにしておく。

このような状態で、スケッチを書きこむと、音がしないのである。toneが働かないのである。そこで、//I2CLCD.print(" "); のように後ろの文をコメント化すると、音がする。後ろの命令が前の命令を妨げるのである。通常は考えられない現象だ。この辺のことがよくわからず、丸2日くらい悩み続けた。

解決策として、割り込みを抜けた後で、割り込みから抜けたフラグか何かを目印にして、割り込みの外で(通常のloopのなかで)I2CLCDへの書き込みをするとよい。

おそらくコンパイルするときに割り込みの何かとI2CLCDのなにかが作用し、変なことが起こるのだろう。よくわからないが。

今回の現象は、I2CLCD,RTC,DHT20,マイクロSDをつないだ状態でおこった。スケッチもとても大きなものなので、他の接続機器の影響かもしれない。ほかの、includeしたライブラリの影響かもしれない。割り込みと何か干渉するのはI2C接続なのか、LCDなのか、あるいは、それ以外につないでいる機器なのかわからない。それを丁寧に調べてはいない。ただ、最もそれらしいと考えられることを、この現象に悩む人がいるだろうということで、記録として公開する。

使ったのは、3.3V、8MHzの改造したarduinoUno互換品。秋月のAE-AQM1602A(KIT)。ライブラリはI2CLCD。

戻る

HOMEに戻る

自作ギターなど手作り大好きキホーテの部屋

自作ギター、手作りウクレレ、電子回路、ミキサー、Arduinoを使った時計、木工などいろいろ、作ったり、直したり。道具の使い方も。ギター作りなど、手作り大好きキホーテの発想と失敗と反省と教訓と喜びなどの記録。