●スイッチ
さて、これらの注意事項を念頭に置きつつ、たくさんある入力装置をひとつずつ見ていこうと思う。これから紹介する部品は全て標準インベントリに記載されている。 最初に紹介したいのは、ボタンスイッチだ。 この押しボタンスイッチはノーマリーオープンでボタンを押すと閉じることができる。 こちらはスライドスイッチで開状態、閉状態のどちらかの状態で保持することができる。自分で選んだ状態で保持できるんだ。 ここに、 シンプルな基板 がある。この基板にはプロセッサとしてATtiny45、インサーキットプログラミングヘッダ、フィルタのキャパシタ、リセット用のプルアップ抵抗器、通信用のFTDIなどが搭載されている。 ヘッダには送信用の配線がある。受信用の配線もある。ふたつのフロー制御配線は使っていない。5Vの電力配線はグランドにつながっている。そして、この基板にはスイッチが設けられている。 スイッチを設けた基板の例 このような見た目 だ。 この基板はボタンを押したときにDの文字(down)を送ることができる。ボタンから手を放すとUの文字(up)を送信する。つまり、これはボタンを押したり放したりした時に文字を送るだけのものだ。 ここで、この基板のために書いた C言語のコード を見てみよう。 今、メインルーティンの部分をお見せしている。 クロックはヒューズで設定することができる。僕はソフトウェア上でその設定を行っている。便利だからね。
ここに書かれていることはクロック分周器を設定せよということだ。そうすると、各々のクロックの進む音はプロセッサが進む音となる。 この設定ののち、出力としてシリアルポートを設定する必要がある。また、ボタンのピンを入力に設定する必要がある。そして、プルアップ抵抗器をオンにしてみよう。これは抵抗値を高く保つけれども、ボタンを引くと低くなる。そして、もしもちょっとピンの外に書くならば、入力はプルアップ抵抗器をオンにする。 そして、これがメインループだ。まず、ピンの抵抗値が低くなるかどうかテストしている。そして、Downを示すDの文字を送る。そして、ピンの抵抗値が高くなるまで待機する。高くなったらUpを意味するUの文字を送る。 繰り返すけれども、これは例えばArduinoなどにちょっと似ているけれども、ライブラリは使えない。全てがこの小さなプログラムに書いてあるんだ。 そして、ピンのタスクは単なるマクロだ。これはピンをテストする。これらの定義の中で、僕はどのピンを用いるかを定義している。そして、これは文字を表示するためのルーティンだ。このルーティンはデータラインがHiかLowかを切り替えるとき、もしくは遅延したときに行われる。 これがシリアルを送信するルーティンを行うソフトウェアだ。
以上がC言語のプログラムについてだ。 こうやって僕たちはプログラムを組んで基板を作る。全部出来たら、ボタンを押してポートに文字を送る。これがスイッチを読み取る方法だ。 このまま続けようと思うけれども、何か質問はあるかい? Bas Withagen:先生が提示されたコードは デバウンス回路 を使ってるんですか? いや、僕は使っていないよ。Basが何の質問をしているのか説明しよう。僕たちが先ほどの例の回路を作るにあたって問題となるのは、ボタンを押すときに実際に電圧はブーンと振動するってことだ。安定するまで何回か上がったり下がったりする。 僕はこのデバウンスしている信号を何回も読んでいるわけではない。つまり、ここで僕は電圧値が低くなるまで待っているんだ。そして、電圧値が低くなり安定してから文字を送信している。そして、次は電圧が高くなるまで待つ。 そしてデバウンスする信号を効率的に読み込むために、僕は文字を送信している間はボタンの信号を読み込まないようにしている。 Bas Withagen:分かりました。
(つづく) 講義の目次は 【和訳版】FabAcademy 2016 からご覧ください。 ※この記事は FabAcademy 2016 におけるニール・ガーシェンフェルド教授(MIT)による講義動画をもとに作成しました。正確な訳ではないので間違っていたら指摘いただけるとありがたいです。