gpt4 book ai didi

c# - 在C#中使用线程实时显示arduino analogRead()

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:37 25 4
gpt4 key购买 nike

我正在制作一个 C# 程序,使其像一个糟糕的示波器一样工作。我有一个发送到串行 (Serial.write(analogRead(A0)) ) 的 Arduino,然后 C# 有一个线程在主线程刷新图表时读取每个 ms 样本。我的疑问是,我应该使用 Serial.write 还是 Serial.print ?

有可能达到 2kS/s 吗?我使用的波特率为 115200,这是代码。

namespace TEST
{
public partial class Form1 : Form
{

static int buffer_size = 1024;

public static string comboBoxText;
public static int[] buffer = new int[buffer_size];
IEnumerable<int> yData;
static int[] range = Enumerable.Range(0, buffer_size).ToArray();
IEnumerable<int> xData = range;
public static bool flag = true;


public Form1()
{


Random rand = new Random();
InitializeComponent();

for (int c = 0; c<buffer_size;c++) {
buffer[c] = 0;
}



Thread thread1 = new Thread(fillBuffer);
thread1.Start();


comboBox1.Items.Add("Select");
foreach (string s in SerialPort.GetPortNames())
{
comboBox1.Items.Add(s);
}


}
static public void fillBuffer()
{
Thread.Sleep(1000);
SerialPort serialPort1 = new SerialPort();
serialPort1.PortName = "COM5";
serialPort1.BaudRate = 115200;
serialPort1.Open();

while (true)
{


}

}


private void timer1_Tick(object sender, EventArgs e)
{
yData = buffer;
chart1.Series[0].Points.DataBindY(yData);

}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{


try {

comboBoxText = comboBox1.Text;
}
catch
{
MessageBox.Show("Porta Inválida");
return;
}
comboBox1.Enabled = false;

}

}

我可以做些什么来每 0.5 毫秒采样一次,然后将样本显示为点的集合吗?我没有得到好的结果。如果有人能帮忙,谢谢!

最佳答案

在 115200 的波特率和良好的处理器速度下,您的算法似乎足够快。但是可以减慢速度的事情之一是timer1的间隔。它应该设置为尽可能低的。另外,对于 Serial.Write 和 Serial.Print 之间的区别,请查看 this forum .此外,使用 .net 内置的串行端口事件处理程序可以减轻您的压力,同时也是一种更快、更高效的解决方案。您可能想检查一下 here

关于c# - 在C#中使用线程实时显示arduino analogRead(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37779689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com