串行编写c# windows窗体Arduino

本文关键字:windows 窗体 Arduino | 更新日期: 2023-09-27 18:01:39

我试图通过串行端口使用windows窗体应用程序与我的Arduido进行通信,我没有得到错误,但由于某种原因它不工作。

我知道它不是串行连接或arduino,因为我已经尝试了另一个vb代码来尝试切换led灯的开关并成功,所以问题是在我的c#代码

我已经导入了正确的命名空间

using System.IO;
using System.IO.Ports;

我已经定义了一个串口对象的形式类

partial class Form1 : Form
    {
        SerialPort sp = new SerialPort();
        ...

并在load事件

中配置它
private void Form1_Load(object sender, EventArgs e)
{
    sp.Close();
    sp.PortName = "com7";
    sp.BaudRate = 9600;
    sp.DataBits = 8;
    sp.Parity = Parity.None;
    sp.StopBits = StopBits.One;
    sp.Handshake = Handshake.None;
    sp.Encoding = System.Text.Encoding.Default;
    ...

我已经使用keyPress事件来尝试写入串行端口

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Up)
    {
        sp.Open();
        sp.Write("u");
        sp.Close();
    }
    else if (e.KeyChar == (char)Keys.Down)
    {
        sp.Open();
        sp.Write("d");
        sp.Close();
    }
    else if (e.KeyChar == (char)Keys.Right)
    {
        sp.Open();
        sp.Write("r");
        sp.Close();
    }
}

任何帮助,谢谢注意:在我的应用程序中有一个对话框,是响应我正在使用的键(向上和向下),它是否与按键事件冲突?我该怎么解决呢

串行编写c# windows窗体Arduino

每次我需要发送命令时,我都不会打开/关闭我的串行端口。

你最好使用流程:

    添加另一个按钮,说"打开"按钮。
  1. 用它来打开你的串行端口(通常一旦你启动了你想要打开端口的软件,i。E开始与arduino控制器或其他设备通信)

    private void OpenButton_Click(object sender, EventArgs e) { try { if (sp.IsOpen == false) { sp.Open();
    } else { MessageBox.Show("port 7 is already opened"); } } catch (UnauthorizedAccessException ex) { MessageBox.Show(ex.Message); } }

  2. 现在无论何时你按下一个按钮,你只需要发送命令(写到你的com端口),不需要打开/关闭:

    private void Form1_KeyPress(对象发送者,keypressevenargs e){

    if (e.KeyChar == (char)Keys.Up)
    {
        //sp.Open();
        sp.Write("u");
        //sp.Close();
    }
    else if (e.KeyChar == (char)Keys.Down)
    {
        //sp.Open();
        sp.Write("d");
        //sp.Close();
    }
    else if (e.KeyChar == (char)Keys.Right)
    {
        //sp.Open();
        sp.Write("r");
        //sp.Close();
    }
    

    }

  3. 现在如果你这样做了,仍然不工作,你需要检查命令是否正确,,可能是sp.Write("u");不做任何事情!!