🥬Arduino与C#通讯
Arduino | C#
在本文中,我们将Arduino Pro Mini连接到PC并使用C#Windows应用程序与其通信。
将硬件连接到PC可能会非常有益,尤其是因为您可以发送命令并监视状态。 您还可以实时调试代码。 当您在模块中苦苦挣扎并且想知道模块的响应并跟踪状态机时,检查变量特别有用。
硬件
Arduino Pro Mini针对狭小空间进行了优化(当您需要尽可能小的电路时),但是在构建项目时却非常强大。 另一个好处是它没有焊接的插头,而插头的插头占用了大量的垂直空间。 您可以通过将导线焊接到引脚上来简单地访问所需的引脚。 由于体积小,它没有内置的USB组件,因此您需要使用一个额外的组件来实现该功能。 市场上有许多串行到USB转换器,但就个人而言,我更喜欢选择一个能够为我提供所有握手引脚的转换器,而不仅仅是Rx和Tx。
这就是为什么我基于FT232R设计一个简单的接口板的原因。我使用了芯片上所有可用的串行信号。您可以从图1的数据表中看到我采用的电路。
物料清单
设置
加载Sketch
出于测试目的,我们将编写一个简单的代码来读取串行输入并相应地设置引脚3的状态:
编辑C#应用
在完成视觉工作之后,我们准备进行一些编码。 首先,要使用串行端口,我们需要打开它,然后我们可以从串行缓冲区中写入或读取。 我们可以访问代码中的串行中断。 串行通信中断可提供更好的响应,因为我们会在数据可用时对其进行处理。 C#串行端口还具有一个事件,该事件将在数据进入缓冲区时触发。 我们可以通过转至属性部分中的events选项卡并双击DataReceived来使用此事件(请参见图7)。 Visual Studio将自动创建事件。
在发送或接收数据之前,我们需要打开串行端口:
然后我们可以读取或写入数据。
代码如下:
代码解析
示例代码通过ASCII字符进行通信。这种方法既方便又可扩展。
在C#代码中,我们需要从Arduino Pro Mini读取引脚的状态,以便将“ STATE”命令发送到Arduino板。 Arduino将通过串口回答“ state = 0”或“ state = 1”。 Arduino向我们发送状态后,我们将相应地更新按钮文本。
事件在与主窗体线程不同的线程中运行,因此它们具有不同的速度。 例如,在我们的情况下,当我们从串行端口收到文本时,我们可能希望在文本框中显示它。 但是,从一开始就创建了所有控制处理程序的Windows主线程控制器可能与所需的控制器(可能是富文本框或按钮)有一些未完成的工作。 在这种情况下,如果我们从与主处理程序分开的另一个线程中调用文本框,则由于多线程情况,程序将崩溃。 文本框控制器一次可以具有两个不同的属性,因此我们应该等到它的工作完成。
这就是为什么我们无法从其他线程(例如串行接收线程)更改文本框文本的原因。 为了避免这种情况,我们可以使用Invoke方法。 每个控制器都有一个Invoke方法,使我们能够从另一个线程更改其属性。 一个Invoke方法可以从另一个线程执行某个委托。 委托就像C中的方法指针一样,这意味着它们引用某个方法并安全地执行它。 因此,首先,我们需要定义一个可以更改控制器属性的委托,该委托在代码中名为“ myDelegate”,然后将其引用到Invoke方法。 从代码中可以看出,通过使用Invoke函数,我们可以进行线程安全的调用。
其余代码很简单。只要用户按下按钮,我们只需将“ ON”或“ OFF”命令写入串行端口即可。
Last updated