こんにちは。
実は、昨日の夜、スイッチサイエンス様主催のmbedワークショップに参加させていただきました。
(こちらについては、別途金曜日にブログをアップさせていただきます♪お楽しみに~)
ワークショップではスイッチやLEDを使った簡単な電子工作を体験しましたが、
そこでスイッチの誤作動を防止するプログラミングを学んだことがとても印象に残り、
今日会社でのり先生たちにお話ししたところ、
その「チャタリング」という現象を防止するプログラムがPi:Co Classicのサンプルプログラムにもあるということで、
勉強することになりました!!
Pi:Co classicのサンプルプログラムSTEP3、スイッチを押すとLEDが点く(再度押すと消える)サンプルプログラムです。
今までのLED点灯や走行と違って難しいのは、
「スイッチが押されたことを覚えておく」プログラム。
「スイッチを押しているときだけLEDが点灯している」ということを実行させるのは、もはや非常に容易なのですが、
「スイッチを一度押したら点灯。再度押したら消灯」ということを実行させるのは…ちょっと難しい。
論理演算子も登場します…。
こんなボタンとLEDの動作、日常にはとてもありふれた動作なのに…!
そして件の「チャタリング」。
ボタンの電気信号の微妙な誤差を防止するのが、以下の画像の下部にある「チャタリング除去用時間待ち空ループ」というものです。
これをコメントアウト(//をつける)してビルド、Pi:Co Classicで実行すると、
ボタンを押してもLEDが点灯したりしなかったりと、大変うっとうしいw
また、以下の画像のように、「スイッチがすべて離されるまで待つ」というのをコメントアウトすると、さらにうっとうしい!!
もうPi:Coちゃん(仮名)言うこと聞かなすぎて嫌になるwww
ただ理屈上で動くプログラムを書けばいいだけではなく、
実際に快適な操作を実現するためには、もう少し努力が必要なんですね…。
コンデンサをつけたりすればハードウェアの段階でチャタリングは防げますが、
コストを考えたらプログラムで防止した方がいいこともあるそうです。
「ハードとソフトってそういう感じで関係しあってるのね!」と、納得した今日の研修でした♪
私はまだ自分で一からプログラムを書いたりできませんが、
その意味とか働きを理解できるだけでもうれしい。
そういうときは、プログラムの流れをスローモーションでイメージするとわかりやすい気がします。
プログラムに書かれている膨大でシンプルな処理の繰り返しは、一瞬で行われてはいますが、実はきちんと順を追って進んでいる。
丁寧に頭で整理しながらよーく観察すると、ときどきプログラムの内容が理解できてうれしいです^^
(と…ときどきですけど…。)
はじめは数字がたくさん並んでいて大いにビビッていましたが、
結構楽しいかも、プログラミング^^!!