1

我有可以通过蓝牙作为 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 在关闭SerialPort 未接收到任何数据后触发 DataReceived 事件

4

2 回答 2

0

我认为电路的设计者从带有“s”的设备请求数据。它必须与它的协议或十六进制代码有关。我在电路%请求数据fprintf(s,'s')的matlab示例中找到了该代码;这就是为什么我在使用 serialport.Write("Blast"); 时可以读取数据的原因。我也试过所有的字母。只有 's' 字符触发事件。

于 2013-09-02T09:27:07.717 回答
0

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

于 2013-08-29T16:32:18.803 回答