我在 Visual Studio 2010 中使用OpenCV来跟踪对象,我正在尝试向 Arduino 发送一个值以旋转连接到相机的伺服系统。我正在使用Arduino Uno。我已经完成了跟踪对象并确定相机需要旋转的方向的C++代码,但是我无法将此数据发送到 Arduino。我目前正在尝试为此使用RS-232电缆。我正在使用 B 型 USB 电缆对我的 Arduino 和 RS-232 进行编程,以尝试将数据从 Visual Studio 发送到 Arduino。这是我的 Visual Studio 串行通信代码:
int portspeed(int centerpix, int xmid)
{HANDLE hDevice = CreateFile(L"COM5",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,0);
DCB lpTest;
GetCommState(hDevice,&lpTest);
lpTest.BaudRate = CBR_9600;
lpTest.ByteSize = 8;
lpTest.Parity = NOPARITY;
lpTest.StopBits = ONESTOPBIT;
SetCommState(hDevice,&lpTest);
DWORD btsIO;
if (centerpix<xmid)
{
char test[] = "2";
WriteFile(hDevice,test,strlen(test),&btsIO,NULL);
cout << "Turn right " << test << endl;
}
else
{
char test[] = "3";
WriteFile(hDevice,test,strlen(test),&btsIO,NULL);
cout << "Turn left " << test << endl;
}
return 0;
}
在 Arduino 代码方面,我有这个,我用它来尝试点亮两个不同的 LED,以查看程序是否能够正确传达它需要旋转的方向:
int incomingByte = 0; // For incoming serial data
void setup()
{
Serial.begin(9600); // Opens serial port, sets data rate to 9600 bit/s
}
void loop()
{
// Send data only when you receive data:
if (Serial.available() > 0)
{
incomingByte = Serial.read();
if (incomingByte==50) //if =2
analogWrite(9,100);
else
analogWrite(9,0);
if (incomingByte==51) //if =3
analogWrite(10,50);
else analogWrite(10,0);
delay(3000);
}
else
analogWrite(9,255);
}
我的解释是我需要启动 C++ 程序(它通过串行通信连续发送数据),然后将 TX 引脚从 RS-232 连接到 Arduino 上的 RX 引脚(数字 0)。当我尝试将程序上传到 Arduino 时出现错误,
avrdude:stk500_getsync():不同步:resp=0x00
这只发生在我有一根电线进入 RX 引脚时,即使这根电线没有连接任何东西。我相信这个错误的发生是因为 RX 正在寻找波特率为 9600 的输入,但是当 C++ 程序运行并以 9600 的速率发送数据时,它仍然给我这个错误。
如何通过串行通信将值从在笔记本电脑上进行实时图像处理的 Visual Studio 项目发送到 Arduino?