 |
 |
始めにbuff_ck()という関数を呼んでいます。この関数はまず、SIOのRXD端子より受信したデータがオーバーランエラー、フレーミングエラー、パリティエラーの3エラーがあるかないか判断しています。どれか1つでもエラービットが立っている場合、エラーコード0を返し、関数を抜けます。
今回使用した赤外線受光モジュールSPS−443−1はこのパッケージにさらに可視光カットフイルタなどを付けるタイプなのか、けっこう蛍光灯の商用電源によるちらつきの影響を受けます。他に購入した素子を評価していないのでなんともいえませんが、一応外乱光対策として3エラーの対策は必要です。
エラーがない場合、受信済みのデータがあるか無いか判断し、ある場合のみ1を返します。データがある場合、char_in()関数で1文字受信します。ポートを初期化しモータ、LEDをOFFします。50msec程度待ってからデータの種類を判断しています。
それぞれ受信アスキーコードデータ A〜Fを以下の動作に割り振りました。
A=前進(両モータ前方回転)
B=後退(両モータ後方回転)
C=右後退(右モータのみ後方回転)
D=右前進(左モータのみ前方回転)
E=左後退(左モータのみ後方回転)
F=左前進(右モータのみ前方回転)
受信データ応じたデータをP80〜P83に出力し、2つのTA7257Pを制御しています。
データが上記以外の場合、ポートをOFFさせてモータを停止します。データがA〜Fであったことさえわかればいいので50msecまってLEDをOFFさせています。数メートル離れた地点からでもこの程度の時間で確認できました。
1秒動作したらP8ポートすべてをOFFし、また入力まちとなります。
全体の動作はアルカリ電池が新品の時に5m離れた場所から制御できる程度の実力でした。
|