赤外線距離センサーのチェック | |
---|---|
void main(void) { startInit("\n*** 距離センサテスト ***\n"); Timer tm; ADCon ad; int left, right; while(true) { left = ad.value(0); right = ad.value(1); tm.wait(200); printf("%3d %3d\n", left, right); } } |
1 2 3 4 タイマーオブジェクトを作る 5 A/Dコンバーターのオブジェクトを作る 6 7 永久ループ 8 左側の距離を測る 9 右側の距離を測る 10 200ms待ち 11 表示 12 13 |
IrDistance.h | |
---|---|
#ifndef _IRDISTANCE #define _IRDISTANCE #include "ADCon.h"; #include "MCPWM.h"; class IrDistance : public ADCon, public MCPWM { private: int left, right; public: IrDistance(); IrDistance(int left, int right); int getLeft(); int getRight(); }; #endif |
1 多重読み込み禁止 2 3 ヘッダーの読み込み 4 ヘッダーの読み込み 5 6 ADConクラスとMCPWMクラスから派生させる 7 8 9 左右のA/Dのチャンネルを格納する変数 10 11 12 A/Dの0と1チャンネルをデフォールトとする 13 任意のチャンネルを指定する 14 左の距離データを得る 15 右の距離データを得る 16 17 18 |
IrDistance.cpp | |
---|---|
#include "IrDistance.h" IrDistance::IrDistance() { left = 0; right = 1; } IrDistance::IrDistance(int L, int R) { left = L; right = R; } int IrDistance::getLeft() { return value(left); } int IrDistance::getRight() { return value(right); } |
1 ヘッダファイルの読み込み 2 3 デフォールトコンストラクタ 4 5 6 7 8 9 引数付きコンストラクタ 10 11 12 13 14 左側の距離を測定する 15 16 17 18 19 右側の距離を測定する 20 21 22 |
赤外線距離センサテスト | |
---|---|
void main() { startInit("\n*** 赤外線距離センサテスト ***\n"); IrDistance robo; int right, left; while(true) { left = robo.getLeft(); right = robo.getRight(); printf("%5d %5d\n", left, right); } } |
1 2 3 4 赤外線距離センサオブジェクトを作る 5 6 永久ループ 7 8 左側の距離を得る 9 右側の距離を得る 10 表示 11 12 |
上級 |
---|
|
通信プロトコル(計測の方法) |
---|
|
Ping.h | |
---|---|
#ifndef _PING #define _PING #include "Port.h" class Ping : public Port { public: Ping() { port=7; // Portクラス bit=0; } Ping(unsigned int port, unsigned int bit) { this->port = port; this->bit = bit; } int value(); }; #endif |
1 再定義禁止用 2 以前に定義してなかった場合 3 親クラスの定義を読み込む 4 5 クラスの宣言、親はPortクラスである 6 7 8 デフォールトコンストラクタ 9 10 ボート7、ビット0を用いる 11 12 13 14 通常のコンストラクタ 15 16 17 18 19 距離データを戻すメソッド 20 21 22 |
Ping.cpp | |
---|---|
#include "Ping.h" int Ping::value() { int i,x; setOutput(); writePin(true); for(i=0; i<11; i++) ; writePin(false); setInput(); x=0; while(!readPin()) if(x++>15000) break; if(x<=15000) { x=0; while(x<15000) { if(!readPin()){ writePin(false); break; } x++; } // while } //if setOutput(); writePin(false); return x; } |
1 ヘッダーファイルの読み込み 2 3 メソッドの定義 4 5 6 出力に設定する 7 1を出力する 8 5.28μs 9 0を出力する 10 入力に設定する 11 あきらめカウンタをゼロにする 12 返事が来るまで待つ 13 15000数えて、超えたらあきらめる 14 15 あきらめなかった場合 16 距離カウンタをゼロにする 17 あきらめない間 18 パルスがゼロになったら計測終了 19 20 21 22 この値は距離に比例する 23 24 25 出力に設定する 26 0を出力する 27 距離を答えとして返す 28 |