gpt4 book ai didi

c++ - 传感器的奇怪读数

转载 作者:行者123 更新时间:2023-11-30 03:50:18 25 4
gpt4 key购买 nike

我的程序由图像处理 (OpenCV) 和接近传感器 (Arduino UNO) 组成。基本上,它会先检测物体并测量其距离,然后再计算物体的大小和形状。

在从接近传感器获取读数时,我试图通过使用 cout 而不是 printf 来提高我的程序性能。以下是程序:

主程序

int main(void){
int j;

/*used for port"COM2"*/
HANDLE hCom=INVALID_HANDLE_VALUE;

char input[30];
string ss,ss1,ss2,ss3;

/*Open "COM2"*/
hCom=CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

if(hCom==INVALID_HANDLE_VALUE)
{
printf("can't open file");
}
DCB dcb;
memset(&dcb,0,sizeof (DCB));
dcb.DCBlength=sizeof (DCB);
dcb.BaudRate=CBR_9600;
dcb.ByteSize=8;
dcb.Parity=NOPARITY;
dcb.StopBits=ONESTOPBIT;
SetCommState(hCom,&dcb);

while(1){
// OpenCV stuffs
// Sensor readings AKA printout <-- THIS PART!
}
}

这部分!中的测试命令:

之前

    if(hCom!=INVALID_HANDLE_VALUE)
{
DWORD dwBytes=0;
j=ReadFile(hCom,&input,18,&dwBytes,NULL);
if(j==1)
{
ss=input;
ss1=ss.substr(0,6);
ss2=ss.substr(6,6);
ss3=ss.substr(12,6);
}
}

for(j=0;j<4;j++){
printf("%c", ss[j]);
}

结果:使用 OpenCV 1-2 fps

OK-ish slowpoke result

之后

    if(hCom!=INVALID_HANDLE_VALUE)
{
DWORD dwBytes=0;
j=ReadFile(hCom,&input,6,&dwBytes,NULL);
if(j==1)
{
cout << input;
}
}

结果:OpenCV 15-20ish fps

Weird characters

我的问题是如何消除读数之间的随机字符[THIS? in AFTER pic]?

提前致谢!

最佳答案

dwBytes 有实际读取的字节数。很可能传感器没有终止正在读取的字符串 input 为空字节,因此 cout 正在打印垃圾。

您可以做的是在调用 cout 之前显式设置 input[dwBytes] = '\0'

关于c++ - 传感器的奇怪读数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31872783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com