GE-11より、新たにセンサーからの情報を取得する回路を搭載したので、ここではセンサーの情報を取得する回路について説明するぞ。
ということでなのだが、プリンタポートから情報を取得するにはいかような方法があるかというわけだ。
プリンタポートは元々、少なくともPC-98では送信専用になっていた。
文献によっては「手抜き」とまで言われる始末。
そしてPC-AT互換機では、受信も可能にはなっているが、初期設定ではやはり送信専用のようだ。
そうすると、このプリンタポートからのロボットの制御では、ロボットからのセンサーを付けることは外道なのであろうか?
プリンタポートという、送信のことしか考えていないケーブルでロボットを制御すること自体が間違いだというのか!?
やっぱりシリアルポートを使ったり、マイクロソフトが勝手に決めた訳の分からない決め事を利用してUSBを使う勉強を死ぬほどしなければならないのであろうか?
否!
ひとつだけ、希望が残されていた。
それは何であろうか?
その唯一、希望を託された存在、その名は何であろうか?
それは、Busy。
そうBusy(ビジー)である。
標準の状態でプリンタポートからデータを取り込む方法があるのだよ!!!
もっと突っ込んで言えば、たいていプリンタポートには他にも意味のある端子がついているので、もしかしたらそれが使えるかもしれないが、パソコンの互換性を考えるとやっぱりBusy端子しかないと思うんだよ俺は。
少なくともBusy端子と、あとは8本のデータ出力線を駆使すれば、何とかなるはずだ!!!
別のページで説明したが、こんな風に、Busy端子がGNDに繋がっているか繋がっていないかで、パソコンはプリンタの状態を確認しているのだ。
嫌でもそれしか方法が無いのだ。
よって、プリンタが止まると、パソコンもデータの送信を止めるが、パソコンはプリンタがどういう状況で止まっているのか分からず、パソコンも止まる。
これが、古いプリンタがタチが悪い理由のひとつだと思うのだがいかがだろうか?。
ここから導き出せる、Busy端子の使用方法は、「センサーが反応したらBusyから出てくる電流がGND端子へ流れる」。
というものだ。
そうして出てくる次の問題は、どのセンサーからBusy端子の電流が出て行ったかが分からないといけない。
どのセンサーから電流が流れて行ったかを知る方法はどうすればよいであろうか。
先述の通り、プリンタポートは標準では、データを受信できる端子はBusy端子ただひとつだけなのだ。
という事は、ロボットにはひとつのセンサーを付ける事しかできないのであろうか?
「その程度のセンサーの数で私に刃向かえるとでも思ったか!」と悪の魔王が嘲笑する。
あるいは、パソコンに向かって「どのセンサーが反応したかぐらい自分で考えろ!」と叫ばねばならないのであろうか?
否!
希望を捨ててはならない。
そうだ、確実に使えるプリンタポートの信号線は決まっているが、その先の回路は俺が自由に設計できるんだ!
よし、ここでBusy端子のサポートメカ…じゃなくて、うまくBusy端子の情報取得を助ける回路を作るぞ!
具体的な略図は、左図のようになる。
図の中の説明文の「どこをLにすれば」とは、要はGNDにつなげば良いと考えていい。
いやぁ、デジタルICの話だとよく「H」だの「L」だのという言葉が出るのだが、「Lにする」という意味がGNDに繋ぐとか、電池のマイナスに繋ぐという意味だとは割と最近になって知ったんだよねぇ。
それまではずっと、「Lにする」という意味を「何も繋がない」という意味だと思い込んでいたものだから、学生の頃は少ない小遣いをドブに捨てる真似をしてしまったなぁ…。
ちなみに、「何も繋がない」は、「ハイインピーダンス」という状態だったりすることがあるから注意らしい。
話が脱線したね。
話を戻すと、使い方はこんな手順になる。
1、図の中の制御回路からセンサーに出ている線は通常はHにしておく。
2、そして、プリンタポートのデータ送出線を使って、制御回路のどこをLにするかを指示する。
3、その後でBusy端子から電流が流れているかを確認して、センサーの状態を確認する。
つまり、パソコンは「おい制御回路、三番目のセンサーの状態を知りたいから三番目の信号線をLにしてみろ」と制御回路に指示を出して、それからBusyの状態を確認するのだ。
こうやってすべてのセンサーを一つ一つ丹念に調べてゆくことで、複数のセンサーをたった一つの入力用電線で取り込めるのだ!
ちなみに、このファイルを書いた現在のGE-11は、プリンタポートのデータ送出線の0番から3番をモーター制御用に、残りの4番から7番をセンサーの情報取得に使っている。