因此,我正在尝试从串行端口读取数据以与Arduino通信。这是我正在使用的代码:
public partial class Form1 : Form
{
SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
public Form1()
{
InitializeComponent();
port.Open();
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
this.Invoke(new EventHandler(DoUpDate));
}
private void DoUpDate(object s, EventArgs e)
{
textBox1.AppendText(port.ReadLine() + "\r\n");
}
}
但是我在文本框中得到的结果是(检查图片):
读取的值应该是975,但我得到了分开的值以及许多空行。
有任何帮助。
EDIT#1:
这是Arduino代码:
int sensorPin=A0;
int sensorValue=0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
sensorValue=analogRead(sensorPin);
Serial.print(sensorValue);
Serial.print("\n");
}
这是当我在arduino IDE中单击串行读取器时的结果(应该显示C#代码)
EDIT#2
更多地考虑了问题之后,我认为C#代码读取的数据不完整非常快,但是我没有解决方案,您知道我能尝试解决什么吗?
答案 0 :(得分:0)
我不太懂C#,但是也许您应该在尝试读取数据之前等待数据进入串行缓冲区。一种方法是使用port.ReadExisting()
,就像可以看到的here!
希望有帮助!
答案 1 :(得分:0)
在loop()中插入20毫秒的延迟时间