【发布时间】:2014-09-24 01:51:28
【问题描述】:
首先我昨天早上开始使用 c#,所以我为潜在的麻木问题道歉。
到目前为止,我编写了以下代码。我能够将数据从 c# 发送到 arduino,这似乎工作正常。现在我想同时通过serial.print从arduino接收数据并将其显示在一个框(ListBox?)中。怎么能把它添加到代码中?
感谢您提供任何意见、提示和想法。
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
stop.Enabled = false;
left.Enabled = false;
right.Enabled = false;
up.Enabled = false;
down.Enabled = false;
string[] ports = SerialPort.GetPortNames();
comboBox1.Items.AddRange(ports);
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void start_Click(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex > -1)
{
string port = (string)comboBox1.SelectedItem;
serialPort2.PortName = port; // "port";
serialPort2.BaudRate = 9600;
serialPort2.Open();
if (serialPort2.IsOpen)
{
start.Enabled = false;
stop.Enabled = true;
left.Enabled = true;
right.Enabled = true;
up.Enabled = true;
down.Enabled = true;
}
}
else
{
MessageBox.Show("Please connect the Arduino and select a Port");
}
}
private void stop_Click(object sender, EventArgs e)
{
if (serialPort2.IsOpen)
{
serialPort2.Close();
start.Enabled = true;
stop.Enabled = false;
left.Enabled = false;
right.Enabled = false;
up.Enabled = false;
down.Enabled = false;
}
}
private void up_Click(object sender, EventArgs e)
{
if (serialPort2.IsOpen)
{
serialPort2.WriteLine("1");
}
}
private void left_Click(object sender, EventArgs e)
{
if (serialPort2.IsOpen)
{
serialPort2.WriteLine("4");
}
}
private void right_Click(object sender, EventArgs e)
{
if (serialPort2.IsOpen)
{
serialPort2.WriteLine("2");
}
}
private void down_Click(object sender, EventArgs e)
{
if (serialPort2.IsOpen)
{
serialPort2.WriteLine("3");
}
}
【问题讨论】:
-
“同时”是什么意思?您是希望收到每次按钮点击的响应,还是希望无论活动如何都持续接收和显示数据?
-
是的,不管我是否向 arduino 发送数据,都会持续接收和显示数据
-
您需要使用单独的线程来处理从 Arduino 接收数据。有很多使用BackgroundWorker 在应用程序 UI 线程继续进行时处理工作的示例。
标签: c# arduino serial-communication