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

时间:2013-08-29 16:11:06

标签: c# visual-studio-2012 bluetooth serial-port

我的设备可以通过蓝牙作为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

2 个答案:

答案 0 :(得分:0)

这可能与SerialPort关系不大,而与Winforms线程与串口的后台工作线程交互的方式有关。有关详细信息,请参阅this的解决方案。

答案 1 :(得分:0)

我认为电路的设计者用's'从设备请求数据。它必须是关于其协议或十六进制代码。我发现matlab中的代码是电路%Request Data fprintf(s,'s');这就是我使用serialport.Write(“Blast”)时可以读取数据的原因;我也尝试了所有的信件。只有's'字符才能触发事件。