BROKEN's Advanced Vehicle Laboratory

プロジェクト / 小型ヒューマノイド2003 for ROBO-ONE

4.5 基礎実験:ボタン操作によるLEDの点灯制御

ここまでの実験は出力ばかりだったので、今度はボタン(タクトスイッチ)による入力を加えてみましょう。サンプルプログラムは先の実験で使用したものをベースにして手を加えたものを用意しました。

ソースコード (pio_2.c)

LEDクラスの状態遷移

このプログラムで注目すべき点は、

の2箇所です。

ボタンが押されたことをチェックする

マイコンを扱っている人は当然のように処理する部分ですが、マイコンはまったく初めてだと??と思う部分です。

// Up button
cnt = 0;
for(i=0; i<3; i++)
    cnt += input( UP_BUTTON );

if( 3 == cnt )
    pushedPtn += UP_BUTTON_EVENT;

ボタンの入力をわざわざ3回読みに行っているのは、チャタリングを除去するためです。ここでチャタリングというのは、スイッチがONまたはOFFになる瞬間に、非常に短い時間で細かいON/OFFを繰り返す現象をいいます。チャタリングを除去しないと、スイッチのON/OFF回数を間違えてカウントしてしまう恐れがあります。チャタリングを除去するには、小さなコンデンサをつけて細かいON/OFFが出ないようハードで押さえ込む方法と、この例のように数回連続して読み込むことでソフト的に除去する方法があります。

ボタンが押されたことをイベントとしてセットする

たいしたことではないのですが、一応工夫してあります、ということで。ボタンのイベントは、複数個同時押しをしても判別ができるようにしてあります。ITRONのイベントフラグをイメージしてみました。

△目次 / 4.6 基礎実験:ボタン操作によるラジコンサーボ制御 >>