センサーから 2 つの異なるデータを送信する回路があります。データはパケットとして送信されます。最初のデータは '$' で、パケットを別のパケットに区切ります。'$' の後に 16 バイトのマイク データと 1 バイトの脈拍センサー データを送信します。着信データを格納する配列があり、20 ミリ秒ごとにデータをプロットした後、配列のゼロ インデックスから新しいバイトを書き始めます。ZedGraph を使用して、これらのデータをさまざまなグラフにプロットする必要があります。しかし、それらのデータを正しく分離できませんでした。オーディオの 1 つ以上のデータが他のグラフに表示される場合があります。これが私のコードです:
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];
}
}