カメラを右に0.07度動かすプログラムを作ろうとしています.
カメラはSONY製EVI-HD1を用いて,openCVで実装しています.
うまく動作しないので,以下のプログラムに足りない命令行を教えていただいてもよろしいでしょうか.
#include <stdio.h>
#include "windows.h"
#include <dshow.h>
//RS232C 制御用
#define ASCII_BEL 0x07
#define ASCII_BS 0x08
#define ASCII_LF 0x0A
#define ASCII_CR 0x0D
#define ASCII_XON 0x11
#define ASCII_XOFF 0x13
void main(int argc, char* argv[])
{
HANDLE hCom;
//RS232C制御用 RS232C の初期化
hCom = CreateFile("COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hCom == INVALID_HANDLE_VALUE) {
return;
}
DCB dcb;
BOOL fRetVal ;
BYTE bSet ;
bSet = 0;
dcb.DCBlength = sizeof(DCB) ;
GetCommState(hCom, &dcb) ;
dcb.BaudRate = 9600; // 通信速度
dcb.ByteSize = 8; // データ長
dcb.Parity = NOPARITY; // パリティビット:EVENPARITY,MARKPARITY,NOPARITY,ODDPARITY
dcb.StopBits = ONESTOPBIT; // ストップビット:ONESTOPBIT,ONE5STOPBITS,TWOSTOPBITS
dcb.fOutxDsrFlow = bSet ;
if (bSet) {
dcb.fDtrControl = DTR_CONTROL_HANDSHAKE ;
} else {
dcb.fDtrControl = DTR_CONTROL_ENABLE ;
}
dcb.fInX = dcb.fOutX = bSet ;
dcb.XonChar = ASCII_XON ;
dcb.XoffChar = ASCII_XOFF ;
dcb.XonLim = 100 ;
dcb.XoffLim = 100 ;
dcb.fBinary = TRUE ;
dcb.fParity = TRUE ;
SetCommState(hCom, &dcb);
//RS232Cの初期化ここまで
int i,j;
unsigned long len;
// 送信用
char send[32];
int send_length;
//受信 b用
unsigned char resv[32];
int resv_length;
unsigned char buff;
char in;
//カメラを右に向ける-----------------------------------------------------------------------
sprintf(send,"\x88\x30\x01\xff"); send_length=4; //アドレス設定
sprintf(send,"\x88\x01\x00\x01\xff"); send_length=5; //インタフェイスクリア
sprintf(send,"\x81\x01\x06\x03\x18\x18\x00\x00\x00\x01\x00\x00\x00\x00\xff"); //右に0.07度
send_length=15;
WriteFile(hCom,send,send_length,&len,NULL); //書き込み
for(i=0;i<32;i++)
{
ReadFile(hCom,&buff,1,&len,NULL); //1つずつ受信
resv[i]=buff;
printf("%02x ",buff);
if(buff==0xff)
{
if(resv[0]==0x90 && resv[1]==0x41) i=0;
else i=32;
}
}
//-----------------------------------------------------------------------------------------
//後処理
CloseHandle(hCom);
}
お礼
アドバイスから動かすことができました. 有難う御座いました.