传感器的奇怪读数

Strange readings from sensor

我的程序由图像处理 (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!
  }
}

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 帧

之后

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

结果:15-20ish fps 使用 OpenCV

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

提前致谢!

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

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