从串行端口读取返回错误的值

本文关键字:错误 返回 串行端口 读取 | 更新日期: 2023-09-27 18:31:40

我有一个连接到FSR的arduino板正在运行。它应该返回有关当前压力的信息。此数据通过 COM5 传输,然后应该在我的 c# 程序中进行分析。传感器将返回介于 0 和 1023 之间的值。

这是我的Arduino代码(可能不重要)

int FSR_Pin = A0; //analog pin 0
void setup(){
  Serial.begin(9600);
}
void loop(){
  int FSRReading = analogRead(FSR_Pin); 
  Serial.println(FSRReading);
  delay(250); //just here to slow down the output for easier reading
}

我的 C# 串行端口读取器如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Windows.Forms;

namespace Serial_Reader
{
    class Program
    {
        // Create the serial port with basic settings
         SerialPort port = new SerialPort("COM5",
          9600);

        static void Main(string[] args)
        {
            new Program();
        }
        Program()
    {
      Console.WriteLine("Incoming Data:");
      // Attach a method to be called when there
      // is data waiting in the port's buffer
      port.DataReceived += new 
        SerialDataReceivedEventHandler(port_DataReceived);
      // Begin communications
      port.Open();
      // Enter an application loop to keep this thread alive
      Application.Run();
    }
    private void port_DataReceived(object sender,
      SerialDataReceivedEventArgs e)
    {
      // Show all the incoming data in the port's buffer
      Console.WriteLine(port.ReadExisting());
    }
    }
}

在这种情况下,我按下传感器并释放它

arduino 上的控制台输出:

0
0
0
0
285
507
578
648
686
727
740
763
780
785
481
231
91
0
0
0
0
0

C# 中的相同方案

0
0
0
0
55
3
61
1
6
46
666
676
68
4
69
5
6
34
480
78
12
0
0
0
0

我完全没有串行端口的经验,但看起来流是......"异步"...就像有另一个字节要读取,但接收器不会意识到这一点。

我能做些什么呢?

从串行端口读取返回错误的值

你会得到答案被截断(就像553变得55'n3),因为你在DataReceived被提出后立即打印,这可能发生在行尾之前。

相反,您应该在循环中使用ReadLine()

Console.WriteLine("Incoming Data:");
port.Open();
while (true)
{
    string line = port.ReadLine();
    if (line == null) // stream closed ?
        break;
    Console.WriteLine(line);
}
port.Close();

这也应该解决双换行问题,因为ReadLine()应该吃来自COM端口的'n