我有一个电路,可以从传感器向我发送两个不同的数据。数据以数据包的形式出现。第一个数据是“$”,用于将一个数据包分隔到另一个数据包。在“$”之后,它发送 16 字节的麦克风数据和 1 字节的脉冲传感器数据。我有一个数组来存储传入的数据,每 20 毫秒绘制一次数据后,我开始从数组的零索引写入新字节。我需要使用 ZedGraph 将这些数据绘制到不同的图表中。但是我无法正确分离这些数据。有时,一个或多个音频数据会显示在其他图表中。这是我的代码:
for (int i = 0; i < 4; i++)
{
if (data[i * 18] == Convert.ToByte('$'))
{
for (int x = ((i * 18) + 1); x < ((i * 18) + 17); x++)
{
listAuido.Add(time, data[x]);
}
for (int a = ((i * 18) + 17); a < ((i * 18) + 18); a++)
{
listPulse.Add(time, data[a]);
}
}
}
我该如何解决这个问题?
电路设置:波特率:38400,频率:200hz,通信类型:RS232。
端口设置:ReadTimeOut=5 WrtieTimeOut=5;
在读取数据时,我使用下面的代码。Read_Data1 引用 data[] 上面的代码。我有一个计数器,在绘制数据后它的值为零,我阻止了我的缓冲区index out of range exception
byte[] Read_Data1 = new byte[1000];
private void myPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (!myPort.IsOpen)
return;
if (myPort.BytesToRead > 0)
{
byte[] buffer = new byte[myPort.BytesToRead];
myPort.Read(buffer, 0, buffer.Length);
DataConversion.bytetobyte(Read_Data1, buffer, buffer.Length, count);
count += buffer.Length;
DataRecord.SaveBytesToFile(buffer, save.FileName);
}
}
public static void bytetobyte(byte[] Storage, byte[] databyte, int datacount, int count)
{
int abc;
for (abc = 0; abc < datacount; abc++)
{
Storage[abc + count] = databyte[abc];
}
}