我想从arduino到VC ++读取6个数据传感器"握手"方法,我发送" 1"到arduino然后这个设备将数据发送到PC。
我的数据格式是:
&data0,data1,data2,data3,data4,data5%
但是当我用VC ++数据读取它总是不完整的时候,甚至认为缓冲区的大小足以容纳所有数据
这是我的vC ++程序的快照,我把它放在计时器事件
上 DWORD nbytes;
char buffer[24];
//Read Sensors
if(!WriteFile( hnd_serial, "1", 1, &nbytes, NULL )){KillTimer(cTimer1);MessageBox(L"Write Com Port fail!");return;}
Sleep(5);
if(!ReadFile( hnd_serial, buffer, 23, &nbytes, NULL )){KillTimer(cTimer1);MessageBox(L"Read Com Port fail!");return;}
Sleep(50);
我已经改变了波特率但结果仍然相同。 但如果我减少一个数据,如data5(成为5个传感器),数据就完成了。 我的程序有问题吗?
答案 0 :(得分:0)
您可以将ReadFile()函数放在do-while循环中。
do{
if(!ReadFile( hnd_serial, buffer, 23, &nbytes, NULL )){
//Process error
break;
}
if (nbytes>= 6)
{
//Put your flag - or process here
break;
}
}while(nbytes);
ReadFile()仅返回当前缓冲区状态,它不会等待接收到满的预期数据
答案 1 :(得分:0)
您不会说出您正在使用的波特率。
您也不会说出已设置的超时(如果有)。
让我们假设它的9600意味着端口每秒传输960个字节。所以每个字节只有1毫秒以上。
如果你的睡眠(5)应该等待" 1"要发送AND以便数据返回,那么您应该等待足够长的时间来传输所有字节。假设设置了超时,以便ReadFile立即返回RX缓冲区中的任何字节,那么您有可能读得太快。
尝试更大的延迟。