如何创建Windows 10 Arduino应用程序(面向绝对初学者)

Microsoft将全力投入Windows 10,最终实现了拥有可跨平台运行的应用程序的梦想。结合对Arduino的官方支持,您可以使用一个功能强大的新工具:能够轻松创建具有与现实世界硬件连接的通用Windows应用程序的功能。

即使在这种情况下,入门方法也是如此您以前从未编程过Windows应用。

在继续阅读之前,请查看我们将要制作的演示。

我应该注意,我还没有从大约10年前开始使用Visual Studio,甚至使用C#。我是从全新安装Visual Studio的角度来解决这个问题的,而忘记了我所知道的一切。

如果您已经对Windows应用程序编程非常有经验,或者正在寻找一种简单的方法来要开始在没有Arduino东西的情况下在Windows中进行编程,请首先尝试Ryan的指南以制作一个简单的Visual Basic应用程序)。

您应该熟悉一些初学者的Arduino项目),但这可能是第一个

下载

首先:您需要加入Windows Insider计划才能获得最新的<预览版strong> Visual Studio 2015 ,以及最新版本的 Windows 10预览版。立即执行-免费。 Windows 10是开发人员预览版,不应安装为主要操作系统。

  • 加入Windows Insider程序,然后下载Windows 10技术预览版
  • 获取Visual Studio 2015社区版的预览。[不再可用]。
  • Visual Studio 是Microsoft自己的开发环境,我们将使用它来创建C#Windows应用程序。

    为什么要使用C#?对于Java来说,它是一种相对简单的编程语言,对于初学者来说,它可以启动并运行可运行的应用程序,但功能强大到足以使您继续创建一些令人惊叹的应用程序(甚至是游戏:C#是Unity脚本语言的首选-免费试用电子书,《使用Unity编程游戏的初学者指南》。

    如果尚未安装,请从Arduino.cc官方网站下载 Arduino IDE ,然后安装标准固件加入董事会。您可以在示例-> Firmata ->标准固件下找到它。这只是将其变成“哑"串行设备,它将执行我们的应用程序告诉它的所有操作–板上本身没有应用程序逻辑,只有我们的应用程序与连接到Arduino的任何传感器或输出设备之间的接口

    就接线而言,您可以如下所示将LED直接粘贴到引脚13和GND,或者使用板载LED。您还需要将一个可变电阻器(我已经使用10k线性电位计)连接到A0(显然,相应的支脚也位于GND和+ 5v上)。

    最后,下载远程布线GitHub上的软件包[不再可用]。这是我们需要添加的层,使我们的Windows应用程序可以与Arduino对话。

    创建应用程序

    继续并打开Visual Studio。如果这是您第一次运行它,则可以选择登录。如果愿意,请忽略它。选择 Visual C#作为开发选项,然后继续;无论哪种方式,都需要花费几分钟的时间来准备首次使用Visual Studio。

    使用模板 Visual C#->空白应用程序(Windows Universal)创建一个新项目)。我将其称为“ Arduino测试",但这没关系。

    这时,我遇到了一个错误,如果我想真正运行该应用程序,则必须将Windows 10切换到开发人员模式。继续执行此操作,尽管如果您发现Windows 10的构建在该设置下崩溃,则这是一个已知的错误,您将需要使用组策略编辑器启用开发人员模式。

    下一步,右键单击解决方案资源管理器中的任意位置(在右侧),然后选择添加->现有项目

    导航至从Github下载Remote Wiring文件的位置-如果已解压缩,则该文件应为名为 remote-wiring-develop 的文件夹。在其中可以找到 Microsoft.Maker.win10 ;在其中,您会发现另外3个文件夹。反过来,通过在这三个文件夹中导航并找到项目文件来添加每个文件。

    如果收到有关“找不到XAML 8.2文件"的任何错误,则说明您使用的Visual Studio版本错误或没有还没有安装开发人员工具。返回本文开头,确保已下载并安装了两个链接的Visual Studio文件。

    您刚刚添加的这3个项目只是Arduino界面的不同层。在解决方案资源管理器中,如果右键单击并选择 Dependencies -> Build Dependencies ,则可以查看哪些层取决于哪个 Serial >不依赖任何内容; Firmata 依赖于Serial; RemoteWiring 依赖于两者)。您需要在此处进行的唯一更改是从下拉列表中选择项目,然后选中每个框以表明您的项目依赖于所有其他项目。

    最后一步:从解决方案资源管理器中再次,右键单击项目下的参考项目,然后选择添加参考。从左侧导航到 Windows Universal ,然后在 Microsoft Visual C ++ AppLocal Runtime Package 旁边打钩。

    下一步,导航到 Projects (也在同一对话框中,在左侧列表中),然后选中每个对话框旁边的框。在三个 Microsoft.Maker 项目中。

    这比应做的要难,但是只需要执行一次即可。现在我们可以从编程中获得一些乐趣–我保证这并不可怕。

    编程

    如果您在后续操作中遇到困难,可以在Pastebin上找到完整的代码。无论如何,我还是强烈建议您仔细阅读下面的说明,以便我可以解释代码的实际作用。

    首先,我们需要添加一些代码,表明我们需要USB端口才能与Arduino通信。从解决方案资源管理器中找到 Package.appxmanifest 文件,然后双击进行编辑。我们需要在其中粘贴一些代码–从技术上讲,我们将“插入子节点",因为它是XML文件,但是只需将整个部分替换为下面的代码,就可以像这样:

    如果您使用的是蓝牙,或者目标是Win8.1而不是10,则确切的代码会有所不同,但以下内容适用于Windows 10,USB连接。

    <Capabilities><Capability Name="internetClient" /><DeviceCapability Name="serialcommunication"><Device Id="any"><Function Type="name:serialPort"></Device></DeviceCapability></Capabilities>

    转到构建菜单->重建解决方案,并确保没有出现任何错误。

    在解决方案资源管理器中,展开 MainPage.xaml 节点。双击将加载表单设计器,稍后我们将返回,但现在打开 MainPage.xaml.cs ,其中包含我们应用程序背后的主要逻辑。

    在第一部分中添加两行,以表示我们将“使用" Arduino位。

    using Microsoft.Maker.serial;using Microsoft.Maker.RemoteWiring;

    我还添加了一行,表示将使用 System.Diagnostics; ,这使我们能够使用 Debug.WriteLine()函数将调试消息输出到IDE。

    首先,让我们定义一些变量使用整个。在 public MainPage()函数声明之前添加这些行。

    UsbSerial connection;RemoteDevice arduino;UInt16 lastvalue;

    下一步,跳转到MainPage()函数–这称为构造函数,并且该函数可以创建应用程序后立即调用,因此我们使用它来设置所有内容。

    首先,添加一行以建立到特定USB设备(Arduino)的USB串行连接。

    connection =new UsbSerial("VID_2341", "PID_0043");

    请注意,标准Arduino Uno的USB ID已被编码到模块中,但是您可以通过 Device Manager ->端口(COM和LPT)进行验证。 -> Arduino Uno ->详细信息选项卡->硬件ID

    然后在其后添加以下几行

    arduino = new RemoteDevice(connection);connection.ConnectionEstablished += OnConnectionEstablished;connection.begin(57600, SerialConfig.SERIAL_8N1);

    这里发生了一些事情。首先,我们创建一个RemoteDevice对象-记住,这一层为我们提供了许多Arduino命令-并将其命名为“ arduino"。下一行附加到ConnectionEstablished事件,表示“一旦成功建立USB连接,请运行名为OnConnectionCreate()的函数。"。

    最后的命令只是使用8N1位模式告知连接已经以57600的波特率启动。

    您还需要立即创建该OnConnectionEstablished()函数,因此将其移到外部

    private void OnConnectionEstablished(){// LOGIC HERE}

    跳回到我之前提到的表单设计器(如果您忘记了如何:双击 MainPage.xaml On 和一个 Off

    选择第一个按钮,然后从底部的``属性''框中选择正确的命名为``OnButton''。单击小闪电图标-这是事件和操作列表,用于指定与表单元素进行交互时发生的情况。在 Click 字段中输入“ OnButtonClick"。

    按下Enter键时,它将自动为该特定按钮事件创建代码并加载标准代码视图。现在切换回表单设计器,并对“关闭"按钮执行相同的操作,但是这次将其称为“ OffButton"和“ OffButtonClick"。当您到达那里时,请继续并将其后面的主窗口表单命名为“页面"-我们稍后将使用它。现在,您应该具有类似于以下屏幕截图的内容:

    再次切换回设计器片刻,然后对于每个按钮再次将 isEnabled 属性设置为 False 。您可以通过直接在XAML代码视图中键入属性来执行此操作,也可以在“属性"框中找到该复选框(如果仍在“动作"视图中,则单击扳手),该复选框位于展开的 Common 下。

    这不是必需的属性,但是禁用按钮是一种好习惯,直到我们确定Arduino已插入并连接。

    要重新启用它们,将以下内容添加到OnConnection Establishmented()函数中。现在,不必太担心代码的确切含​​义,这只是您应该在现代Windows应用程序中处理表单更新以确保良好性能的方式。连接到Arduino后,将按钮的 IsEnabled 属性设置为true。

    private void OnConnectionEstablished() { // enable the on off buttons var action = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() => { OnButton.IsEnabled = true; OffButton.IsEnabled = true; })); arduino.pinMode(14, PinMode.ANALOG); arduino.AnalogPinUpdatedEvent += MyAnalogPinUpdateCallback; Debug.WriteLine(arduino.analogRead(14)); }

    您还将看到一个更熟悉的pinMode()语句我们在引脚14上有一个模拟输入(有13个数字引脚,所以A0从14开始计数)。然后,我们有了另一个事件声明–当模拟引脚值更新时,调用函数MyAnalogPinUpdateCallback。

    最后,我们需要编辑按钮单击事件,并确定模拟输入更改时会发生什么。让我们从按钮开始。我们可以使用与常规Arduino代码类似的函数名称来与Arduino交互,如下所示:

    将其粘贴到onButton事件中,并将其粘贴到offButton中:

    arduino.digitalWrite(13, PinState.LOW);

    简单。来自Arduino的模拟输入有些棘手,但这是我想出的。

    public void MyAnalogPinUpdateCallback(byte pin, UInt16 value) { if(value-lastvalue >5 || lastvalue-value > 5){
    Debug.WriteLine("Pin A" + pin + " is now " + value); var action = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() => { byte num = Convert.ToByte(value / 4); Page.Background = new SolidColorBrush(Windows.UI.Color.FromArgb(255, num, num, Convert.ToByte(255 -num))); })); } lastvalue = value; }

    请注意,我将从引脚收到的先前值存储在一个名为lastValue的变量中。这使我们能够检查该值有多少变化,并且仅在差异显着时才作出反应(一种信号平滑)。如果它在任一方向上的变化都超过5(值的整个范围是024,那么我们将通过更改Page元素的RGB背景颜色值来做出反应。

    因为我们只有一个数字和我一起工作时,我很着急,在这里用制作R,G和B所需的3个数字对事情稍作改动。您可能会想出一些更漂亮的东西。

    完成< /

    就是这样–运行代码,您应该会看到与上面的屏幕截图类似的内容。这些按钮将打开和关闭LED,可变电阻器将改变背景。如果遇到麻烦,请不要忘记完整的代码在这里。

    现在,您可以编写自己的与Arduino交互的Windows 10应用了,您将做什么?也许是家庭自动化控制器?在评论中让我知道。

    标签: Arduino 编程