C# 如何用蓝牙c触发串口数据接收事件

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) {

我的设备可以通过蓝牙连接到我的笔记本电脑,如COM5。该装置有一个脉冲传感器。我想把来自传感器的数据绘制成图形。但是,当我连接到COM5时,不会触发serialport_DataReceived事件。我用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关系不大,而与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”触发事件。