先日、ドットマトリクスが1周期あたり1回しか表示されない問題があり、マイクロスイッチをもう一つ取り付けることによって改善すると投稿しました。
しかし、よくよく考えてみると、作成していたプログラムは2回目の表示が終わった後、無限ループに突入し、その無限ループがスイッチの検出によって抜けられるという使用になっていました。そのため、1回目のドットマトリクスの表示中、2回目の表示までの間、2回目の表示中にスイッチが押された場合、その押された信号をとり逃していました。
そこで、結論としましては、スイッチの検出を割り込みによって実現することにしました。考えてみればすごく単純なことなのですが、なぜか今まで気が付きませんでした。なんにせよ、スイッチ一つでも、きちんと1周期あたり2回の表示ができるようになりました。
とりあえず、このように表示されるようになりました。少し、2重になってしまっているところがあるのは、タッチセンサが完全に終端で検出するわけではないためです。きれいに表示させるためには、タッチセンサが触れてからの待ち時間を調節する必要があります。
これで、一応プログラムの方は大方完成となります。ただ、たまに、予期しない表示があったりするため、その点を直したら、ソースを公開しようと考えています。
一応、割り込み部分のソースをあげておきます。
#include <avr/pgmspace.h> void setup() { //ピン設定 attachInterrupt(2, change_sw, RISING);//割り込み(21番ピン) } volatile int state = 0; void loop() { //処理 } void change_sw() { state = 1; delay(30);//チャタリング防止 }
参考にしたサイト
Arduinoリファレンス attachInterrupt()