【发布时间】:2016-06-12 22:27:29
【问题描述】:
我正在制作一个 C# 程序,让它像一台糟糕的示波器一样工作。我有一个 Arduino 发送到串行 (Serial.write(analogRead(A0)) ),然后 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 毫秒采样一次,然后将样本显示为点的集合?我没有得到好的结果。如果有人可以帮忙,谢谢!
【问题讨论】:
-
你试过串口事件吗?