C# 如何用蓝牙c触发串口数据接收事件
我的设备可以通过蓝牙连接到我的笔记本电脑,如COM5。该装置有一个脉冲传感器。我想把来自传感器的数据绘制成图形。但是,当我连接到COM5时,不会触发serialport_DataReceived事件。我用matlab试过这个设备。它需要并绘制数据,但我不能用c语言获取数据。我检查了设备的连接状态,一切正常。我试图更改DtrEnabled和RtsEnapled属性,但没有成功C# 如何用蓝牙c触发串口数据接收事件,c#,visual-studio-2012,bluetooth,serial-port,C#,Visual Studio 2012,Bluetooth,Serial Port,我的设备可以通过蓝牙连接到我的笔记本电脑,如COM5。该装置有一个脉冲传感器。我想把来自传感器的数据绘制成图形。但是,当我连接到COM5时,不会触发serialport_DataReceived事件。我用matlab试过这个设备。它需要并绘制数据,但我不能用c语言获取数据。我检查了设备的连接状态,一切正常。我试图更改DtrEnabled和RtsEnapled属性,但没有成功 private void Form1_Load(object sender, EventArgs e) {
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关系不大,而与Winforms线程与SerialPort的后台工作线程交互的方式关系更大。有关更多信息,请参阅的解决方案。我认为电路的设计者从带有“s”的设备请求数据。它必须是关于它的协议或十六进制代码。我在matlab示例中发现,电路%的代码请求数据fprintfs,'s';这就是为什么我可以在使用serialport.WriteBlast时读取数据;我还试了所有的信。只有's'字符触发事件。在计时器100ms中,我使用了serialport.WriteBlast;这会在每个滴答声中触发serialport_DataReceived事件,我可以读取来自脉冲传感器的数据。但是,当我使用serialport.WriteAbcDeFGgHzxY时;这不是触发事件的原因。我真的不明白逻辑。我们是否每次都必须向端口写入初始数据?如果是,那就不好,因为我需要绝对正确的数据。也许我应该使用ReceivedBytestReshold。我真的很困惑…奇怪,肯定是我没见过的东西,但再一次,我没有用我的串行端口做蓝牙。您可以从Package Manger控制台尝试:安装Package AgingMonator,看看它是否提供了不同的行为。这是我认为电路的设计者要求使用“s”的数据。它必须是关于它的协议或十六进制代码。我在matlab示例中发现,电路%的代码请求数据fprintfs,'s';这就是为什么我可以在使用serialport.WriteBlast时读取数据;我还试了所有的信。只有“s”触发事件。