自転車テールライト 機能追加
この前のテールライトですが、あれから少しソフトの変更をしました。
初見の人の為に一行で説明しておきますと、
「緊急自動車の LED 警光灯と同じ点滅モードに切り替え出来るよう改造した自転車用テールライト」
のことです。
参照: 2012-07-16 - LCARS blog Supplemental
スイッチを押すたびに [ランダムフォー] [トリプルフラッシュ] [高速トリプルフラッシュ] そして OFF という動作でした。
PICのプログラムとしては、初歩の初歩である LED 点滅なのでとても簡単です。 スイッチチャタリング除去も単純にウェイト後に再度読み直しで行っているだけですし。
ただ、いつまでもこれをやっていたのでは進歩がありません。
というわけで、Timer0 割り込みという機能を使い、こっちでスイッチを監視する方法に変更します。 これだとチャタリング除去も行え、なおかつスイッチの 「単押し」 と 「長押し」 の判別が出来るようになります。 という事は、単押しで点滅モード変更、長押しで電源オフが実現するわけです。
今ここで「変更します」などとサラーっと書いていますが、実は Timer0 割り込み処理には相当悩みました。
実はここに来て初めてこの機能を使うのです。 Timer0 自体とその中でのチャタリング除去は比較的すぐに理解しましたが、スイッチ単押し/長押しの判別処理がどうしても動いてくれません。
ネットで探しても SLEEP からのポート変更割り込み復帰機能も考えているので、そのものズバリなアセンブラリストは見つかるわけもなく。 毎日毎夜、思い付いてはプログラムを修正し、動かなくては考えるを繰り返すこと 3 週間!
ようやく思ったとおりに動いた時は思わずガッツポーズです。
私のように PIC 初心者のために、Timer0 割り込みによるスイッチ単押し・長押し・チャタリング除去のフローチャートを載せておきます。
▼ Timer0 割り込みによるチャタリング除去及び単押し/長押し判別
スイッチ長押しによる即時オフとモード記憶機能を追加したので、点滅モードをあと二つ増やしました。 一つは普通の毎秒 4 発のシングルフラッシュ。 もう一つはアメリカの消防車なんかで採用されている WHEELEN 社製の警光灯で、その中の Signal Alert(シグナル・アラート)という点滅パターンです。 これも中々良いパターンなので採用してみました。
動作はまずスイッチを押すと順番に [ランダムフォー] [トリプルフラッシュ] [高速トリプルフラッシュ] [シグナル・アラート] [シングルフラッシュ] と点滅パターンが変化します。 そして長押しすると点滅オフ。 再度押すとオフ時点でのモードで点滅を再開します。
それでは実際の動作風景をご覧ください。
▼ 改造した自転車用テールライト 3