我的设备可以通过蓝牙作为COM5连接到我的笔记本电脑。该设备有一个脉冲传感器。我想绘制从传感器到图形的数据。但是,当我连接到COM5时,不会触发serialport_Datarecieved事件。我尝试使用matlab设备。它需要并绘制数据,但我无法在c#中获取数据。我检查了设备的连接状态,没关系。我试图改变DtrEnabled和RtsEnapled属性,但没有用。
private void Form1_Load(object sender, EventArgs e)
{
cmbPortList.Items.AddRange(SerialPort.GetPortNames());
cmbPortList.Sorted = true;
cmbPortList.SelectedIndex = 0;
this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
}
private void btnOpenPort_Click(object sender, EventArgs e)
{
try
{
serialPort1.PortName = cmbPortList.Text;
serialPort1.BaudRate = 9600;
serialPort1.DataBits = 8;
serialPort1.ReadTimeout = 500;
serialPort1.WriteTimeout = 500;
serialPort1.Handshake = Handshake.None;
if (!serialPort1.IsOpen)
{
btnRun.Enabled = true;
serialPort1.Open();
}
}
catch (Exception ex)
{
serialPort1.Close();
}
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
while (serialPort1.BytesToRead > 0)
{
Thread.Sleep(50);
byte[] buffer = new byte[serialPort1.BytesToRead];
serialPort1.Read(buffer, 0, buffer.Length);
}
}
我无法读取缓冲区中的任何数据。当设备未通过蓝牙连接时,LED闪烁。所以我绝对相信我连接到设备。 蓝牙或代码有问题吗?我应该使用另一个图书馆来传达蓝牙设备吗? 我已阅读下面的链接。 SerialPort fires DataReceived event after close SerialPort not receiving any data
答案 0 :(得分:0)
这可能与SerialPort关系不大,而与Winforms线程与串口的后台工作线程交互的方式有关。有关详细信息,请参阅this的解决方案。
答案 1 :(得分:0)
我认为电路的设计者用's'从设备请求数据。它必须是关于其协议或十六进制代码。我发现matlab中的代码是电路%Request Data fprintf(s,'s');这就是我使用serialport.Write(“Blast”)时可以读取数据的原因;我也尝试了所有的信件。只有's'字符才能触发事件。