C言語でEV3開発(8)-opOUTPUT_POWERコマンド
どもです。
今回のエントリーでは、EV3でモーターを動かします。
なお、今回のエントリーでもUbuntu/Eclipseでのクロス環境を前提として、本文を作成します。
1. ポートのオープン/クローズ
InteligentBoxのポートのオープンです。
ここで指定するポート名には、"/dev/lms_pwm"を指定します。
実際のコードは、以下。
fd = open("/dev/lms_pwm", O_RDWR); // ポートを開く
2. プログラムのスタート
EV3上でモーターを動作させるためには、プログラム内で以下の「コマンド」を実行する必要があります。
- opPROGRAM_START
- opOUTPUT_START
そして、これらのコマンドを実行するためには、以下のコードを実行します。
//opPROGRAM_STARTコマンド
UBYTE Buf[4];
int ret;
Buf[0] = opPROGRAM_START;
ret = write(motor_fp, &Buf[0], 1);
//opOUTPUT_STARTコマンド
UBYTE Buf[4];
int ret;
Buf[0] = opOUTPUT_START;
Buf[1] = ch; // モーターが接続されているInteligentBoxのポート番号
ret = write(motor_fp, &Buf[0], 2);
3.モーターを動かす
- opOUTPUT_POWER
このコマンドでは、前述の2つのコマンドの様にコマンドコードを実行するだけではありません。
動作させるためは、動作するスピード/パワーを指定する必要があります。
スピード/パワーは、-100~100で指定します。単位は、"%"です。
そして、実際のコードは以下の通りです。
//opOUTPUT_POWERコマンド
UBYTE Buf[4];
int ret;
Buf[0] = opOUTPUT_POWER;
Buf[1] = ch;
Buf[2] = power; // -100~100
ret = write(motor_fp, Buf, 3);
4.モーターを止める
モーターを止めます。
これには、以下に示す2通りの方法があります。
- opOUTPUT_POWERコマンドで、powerに0を指定する。
- opOUTPUT_STOPコマンドを実行する。
それぞれのコードを、それぞれ順番に示します。
4.1.opOUTPUT_POWERコマンドを実行する
opOUTPUT_POWERコマンドでpowertに0を指定するコードは、以下になります。
UBYTE Buf[4];
int ret;
Buf[0] = opOUTPUT_POWER;
Buf[1] = ch;
Buf[2] = 0; //出力:「0」に設定
ret = write(motor_fp, Buf, 3);
4.2.opOUTPUT_STOPコマンドを実行する
opOUTPUT_STOPコマンドは、以下のコードで実行します。
UBYTE Buf[4];
int ret;
Buf[0] = opOUTPUT_STOP;
Buf[1] = ch;
ret = write(motor_fp, &Buf[0], 2);
4.3.方法の違い
もちろんですが、これらの処理ではそれぞれ違いがあります。
opOUTPUT_POWERコマンドを使用した場合には、再度モーターを雨後層とした場合には、再度opOUTPUT_POWERコマンドを実行すればモーターの動作を開始できます。
しかし、opOUTPUT_STOPコマンドを実行した場合には、再度opOUTPUT_STARTコマンドを実行する必要があります。
また、opOUTPUT_STOPコマンドでモーターの動作を止めた場合、opOUTPUT_POWERでパワーを0にせずに再度opOUTPUT_STARTを実行すると、すぐにモーターの動作が開始されます。
このような違いがあるので、モーターを止める手順については注意が必要です。
5.プログラムのストップ
モーターの動きを停止します。
このためには、以下の順番でコマンドを実行する必要があります。
- opOUTPUT_STOP
- opPROGRAM_STOP
opOUTPUT_STOPについては、既出なので割愛します。
ここでは、opPROGRAM_STOPのコードののみ紹介します。
5.1.opPROGRAM_STOPのコード
opPROGRAM_STOPは、以下のコードで実行します。
UBYTE Buf[4];
int ret;
Buf[0] = opPROGRAM_STOP;
ret = write(motor_fp, &Buf[0], 1);
6.ポートのクローズ
これは、特筆することないです。
以下のコードで、完了します。
close(fd);
6.まとめ
以上、モーターを動作させる際の、基本的な手順を示しました。
次回は、モーターを動作させる他のコマンドについてのエントリーを作成します。
ディスカッション
コメント一覧
まだ、コメントがありません