【问题标题】:Strange readings from sensor传感器的奇怪读数
【发布时间】:2015-10-30 14:33:21
【问题描述】:

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

之后

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

结果:1​​5-20ish fps 与 OpenCV

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

提前致谢!

【问题讨论】:

  • 您是否尝试用零初始化“输入”?
  • 你的最小例子在哪里?
  • @Eugene Welp 我不敢相信我错过了。问题解决了。感谢您的评论!

标签: c++ string cout


【解决方案1】:

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

你可以做的是在调用cout之前明确设置input[dwBytes] = '\0'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-31
    • 2014-08-11
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2016-04-21
    相关资源
    最近更新 更多