Microsoft将全力投入Windows 10,最终实现了拥有可跨平台运行的应用程序的梦想。结合对Arduino的官方支持,您可以使用一个功能强大的新工具:能够轻松创建具有与现实世界硬件连接的通用Windows应用程序的功能。
即使在这种情况下,入门方法也是如此您以前从未编程过Windows应用。
在继续阅读之前,请查看我们将要制作的演示。
我应该注意,我还没有从大约10年前开始使用Visual Studio,甚至使用C#。我是从全新安装Visual Studio的角度来解决这个问题的,而忘记了我所知道的一切。
如果您已经对Windows应用程序编程非常有经验,或者正在寻找一种简单的方法来要开始在没有Arduino东西的情况下在Windows中进行编程,请尝试Ryan制作简单的Visual Basic应用程序的指南。绝对的编程初学者可能想先阅读我的Programming 101(第2部分)文章。
您应该熟悉一些初学者的Arduino项目(甚至可以阅读我们的Arduino指南),但这可能是您第一次尝试创建真正的计算机软件来与之交互。
首先:您需要加入Windows Insider计划才能获取 Visual Studio 2015 的最新预览版和 Windows 10 Preview 的最新版本。立即执行-免费。 Windows 10是开发人员预览版,不应安装为主要操作系统。
加入Windows Insider程序,然后下载Windows 10威廉希尔官方网站 预览版
获取Visual Studio 2015 Community Edition的预览版[不再可用]。
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 [不再可用]下载Remote Wiring软件包。这是我们需要添加的层,它将使我们的Windows应用程序能够与Arduino对话。
创建应用程序
继续并打开Visual Studio。如果这是您第一次运行它,则可以选择登录。如果愿意,请忽略它。选择 Visual C#作为开发选项,然后继续;无论哪种方式,都需要花费几分钟的时间来准备首次使用Visual Studio。
使用模板 Visual C#-》 空白应用程序(Windows Universal)创建一个新项目)。我称我为“ Arduino测试”,但这没关系。
这时,我遇到了有关必须将Windows 10切换到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连接。
转到构建菜单-》 重建解决方案,并确保没有收到任何错误。
从解决方案资源管理器中,展开 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设备的USB串行连接(
connection =new UsbSerial(“VID_2341”, “PID_0043”);
注意,标准Arduino Uno的USB ID已被编码到模块中,但是您可以从设备管理器进行验证。 》-》 端口(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()函数,因此将其移出MainPage()函数,只是制作一个空白函数,如下所示。
private void OnConnectionEstablished()
{
// LOGIC HERE
}
跳回到我前面提到的表单设计器(如果您忘记了如何:双击《解决方案资源管理器中的strong》 MainPage.xaml )。创建两个按钮。为此,请打开“工具箱”标签,该标签会垂直固定在屏幕左侧。将两个按钮拖到页面上,然后标记为 On 和一个 Off 。
选择第一个按钮,然后从右下角的“属性”框中将其命名为“ OnButton”。单击小图标-这是事件和操作列表,用于指定与表单元素进行交互时发生的情况。在 Click 字段中键入“ OnButtonClick”。
按Enter键时,它将自动为该特定按钮事件创建代码并加载标准代码视图。切换回现在是表单设计者,并且对“关闭”按钮执行相同的操作,但是这次将其称为“ OffButton”和“ OffButtonClick”。当您到达那里时,请继续并将其后面的主窗口表单命名为“页面”-我们稍后将使用它。现在,您应该具有类似于以下屏幕截图的内容:
再次切换回设计器片刻,然后再次对每个按钮进行设置 isEnabled 属性设置为 False 。您可以通过直接在XAML代码视图中键入属性来执行此操作,也可以在“属性”框中找到该复选框(如果仍在“动作”视图中,则单击“扳手”),该复选框位于展开的 Common
这不是必需的,但是禁用按钮是一个好习惯,直到我们确定已插入并连接了Arduino。
要重新启用它们,将以下内容添加到OnConnectionEstablished()函数。现在,不必太担心代码的确切含义,这只是您应该在现代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上有一个interwetten与威廉的赔率体系 输入(有13个数字引脚,所以A0从14开始计数)。然后,我们有了另一个事件声明–当模拟引脚值更新时,调用函数MyAnalogPinUpdateCallback。
最后,我们需要编辑按钮单击事件,并确定模拟输入更改时会发生什么。让我们从按钮开始。我们可以使用与常规Arduino代码类似的函数名称来与Arduino交互,如下所示:
arduino.digitalWrite(13, PinState.HIGH);
将其粘贴到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,可变电阻器将改变背景。如果遇到问题,请不要忘记完整的代码。
责任编辑:wv
-
WINDOWS
+关注
关注
3文章
3544浏览量
88664 -
应用程序
+关注
关注
37文章
3268浏览量
57699 -
Arduino
+关注
关注
188文章
6469浏览量
187016
发布评论请先 登录
相关推荐
评论