【问题标题】:Unable to transfer complete data stream from Arduino Uno at high baudrate无法以高波特率从 Arduino Uno 传输完整的数据流
【发布时间】:2022-10-02 15:06:35
【问题描述】:

我正在尝试将 115200 Bd 的一些数据传输到 C# 表单 RichTextBox。下面是我的 Arduino 代码:

void serialEvent() { 
  
  if (Serial.available()) {
    int command = Serial.parseInt();
    Serial.println(command);

    switch(command) {
    case 1:
      /*executes its job and writes data in the following format in each line - xxxxxx xxx xxx*/
      break;
    case 0:
      /*executes another unrelated job*/
      break;  
    }
  }
}

现在,在 6000/7000 行附近,总的书面行数停止打印到我的 C# 表单。为什么会这样,以及如何纠正它?我无法降低波特率;事实上,我想增加它。我希望以一种可以通过 C# 表单对其执行数学函数的方式访问数据,并在需要时复制它。

下面是我的 C# 表单应用程序代码部分:

private void settext(string val)
    {
        richTextBox1.AppendText(val);
    }

    private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        string incomstring = serialPort1.ReadLine();
        settext(incomstring);
    }
private void button5_Click_1(object sender, EventArgs e)
    {
        try
        {
            Cursor.Current = Cursors.WaitCursor;
            if (serialPort1.IsOpen)
            {
                serialPort1.WriteLine(\"1\");
            }
            else
            {
                MessageBox.Show(\"Open Port FIrst.\", \"Port not open.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            Cursor.Current = Cursors.Default;
        }
        
    }
  • 不要在活动中打印出来
  • 您可以为串行流添加缓冲和流量控制吗?这样您就可以为自己争取更多时间来处理所有数据。
  • @PapaAtHome 之前有人提到过这样的事情,将其分成块并使用缓冲区数组,但我不知道该怎么做。你能建议样品或解决方案吗?
  • @NeilButterworth我很抱歉我不明白,请用更通俗的方式解释。

标签: c# c++ serial-communication


【解决方案1】:

您提到了“Arduino”,那么您的“串行线”可能是一个虚拟 USB 串行端口。

大约一个月前我有similar problems。但是我只能控制接收端的代码,并且在后期(对于项目)对发送端的代码有一些了解。

虚拟 USB 串行连接是一个已知的问题来源。我用物理串行线做了一些比较测试,并没有看到我在虚拟 USB 串行线上遇到(并且仍然存在)的那种问题。然后给它一些建议,我看到了两种方法。

第一个是添加缓冲和流量控制。这是一种通用技术,您应该能够通过谷歌搜索它的一些示例。

第二种是使用专用串行线。使用 Ardino 时,您可能有一些未使用的 I/O 备件可用于此目的。一个额外的要求是在您的接收端,您需要一个真正的串行端口。使用 RS232 到 USB 转换器不是这种方法的选择。然后,通过使用 DTR 和 RTS 等硬件线路或使用 Xon/Xoff 的软件解决方案来实现流控制要容易得多。您可以在wikipedia 查找一些详细信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-25
    • 2021-11-14
    • 2015-05-17
    • 2016-02-08
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    相关资源
    最近更新 更多