C言語でEV3開発(10)opOUTPUT_CLEAR_COUNTコマンド
どもです。
前回のエントリーのラストで、「モーターを動かすコマンド」と書きましたが、今回紹介するコマンドは、モーターを動かすコマンドではありません。
ごめんなさい。
今回のエントリーでは、モータのカウントをリセットするコマンドについて書きます。
具体的には、「opOUTPUT_CLR_COUNT」コマンドです。
なお、このコマンドの実行結果は、IntelligentBoxのディスプレイの表示により確認できます。
1.opOUTPUT_CLR_COUNTコマンド
先にも書きましたが、今回紹介するコマンドです。
前回のエントリーで使用していたコマンドです。
実際にコマンドデータを実行する場合には、以下のようにデータを設定します。
UBYTE Buf[4];
Buf[0] = opOUTPUT_CLR_COUNT;
Buf[1] = ch;
あとは、このデータをwrite関数を使用してモーターのポートに書き込みます。
その結果、IntelligentBoxの値がクリアされます。
2.コード
というわけで、opOUTPUT_CLR_COUNTコマンドを使用して、モーターの回転回数、回転角度をクリアしてみます。
実際のサンプルプログラムを、以下に記載します。
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include "lms2012.h"
#define CH_A (0x01)
#define CH_B (0x02)
#define CH_C (0x04)
#define CH_D (0x08)
// モーターのポート名
#define PWM_MOTOR_PORT_NAME ("/dev/lms_pwm")
typedef unsigned int UINT;
typedef signed int SINT;
//typedef unsigned char UBYTE;
//typedef signed int SBYTE;
typedef void VOID;
// モーターのファイルディスクリプター
SINT motor_fp;
int ProgramStart(void) {
UBYTE Buf[4];
int ret;
Buf[0] = opPROGRAM_START;
ret = write(motor_fp, &Buf[0], 1);
return ret;
}
int ProgramStop(void) {
UBYTE Buf[4];
int ret;
Buf[0] = opPROGRAM_STOP;
ret = write(motor_fp, &Buf[0], 1);
return ret;
}
int MotorStart(UBYTE ch) {
UBYTE Buf[4];
int ret;
Buf[0] = opOUTPUT_START;
Buf[1] = ch;
ret = write(motor_fp, &Buf[0], 2);
return ret;
}
int MotorStop(UBYTE ch) {
UBYTE Buf[4];
int ret;
Buf[0] = opOUTPUT_STOP;
Buf[1] = ch;
ret = write(motor_fp, &Buf[0], 2);
return ret;
}
int MotorPower(UBYTE ch, UBYTE power)
{
UBYTE Buf[4];
int ret;
Buf[0] = opOUTPUT_POWER;
Buf[1] = ch;
Buf[2] = power;
ret = write(motor_fp, Buf, 3);
return ret;
}
int MotorReset(UBYTE ch) {
UBYTE Buf[4];
int ret;
Buf[0] = opOUTPUT_RESET;
Buf[1] = ch;
ret = write(motor_fp, Buf, 2);
return ret;
}
int ClearCount(UBYTE ch) {
UBYTE Buf[4];
int ret;
Buf[0] = opOUTPUT_CLR_COUNT;
Buf[1] = ch;
ret = write(motor_fp, Buf, 2);
return ret;
}
int main() {
motor_fp = open(PWM_MOTOR_PORT_NAME, O_RDWR);
if (motor_fp < 0) {
printf("Can not open MOTOR PORT\r\n");
return (-1);
}
ProgramStart();
ProgramStop();
ProgramStart();
MotorReset(CH_D);
MotorStart(CH_D);
MotorPower(CH_D, 30);
sleep(3);
MotorPower(CH_D, 0);
sleep(3);
ClearCount(CH_D);
sleep(3);
MotorPower(CH_D, 30);
sleep(3);
MotorPower(CH_D, 0);
sleep(3);
ClearCount(CH_D);
MotorStop(CH_D);
ProgramStop();
close(motor_fp);
exit(0);
}
また、main関数内のモーターを動作させるシーケンスも、今回用に少し修正しています。
3.動かしてみた
というわけで、実際に動かしてみた場合の動画です。
4.まとめ
さて。
今回は、モーターを動かす一番簡単な(と、私が勝手に思っている)コマンドについて紹介しました。
次回は、同じようにモーターを動かすためのコマンドを引き続き紹介していきます。
では。
ディスカッション
コメント一覧
まだ、コメントがありません