Microsoft將全力投入Windows 10,最終實現(xiàn)了擁有可跨平臺運行的應(yīng)用程序的夢想。結(jié)合對Arduino的官方支持,您可以使用一個功能強大的新工具:能夠輕松創(chuàng)建具有與現(xiàn)實世界硬件連接的通用Windows應(yīng)用程序的功能。
即使在這種情況下,入門方法也是如此您以前從未編程過Windows應(yīng)用。
在繼續(xù)閱讀之前,請查看我們將要制作的演示。
我應(yīng)該注意,我還沒有從大約10年前開始使用Visual Studio,甚至使用C#。我是從全新安裝Visual Studio的角度來解決這個問題的,而忘記了我所知道的一切。
如果您已經(jīng)對Windows應(yīng)用程序編程非常有經(jīng)驗,或者正在尋找一種簡單的方法來要開始在沒有Arduino東西的情況下在Windows中進行編程,請嘗試Ryan制作簡單的Visual Basic應(yīng)用程序的指南。絕對的編程初學者可能想先閱讀我的Programming 101(第2部分)文章。
您應(yīng)該熟悉一些初學者的Arduino項目(甚至可以閱讀我們的Arduino指南),但這可能是您第一次嘗試創(chuàng)建真正的計算機軟件來與之交互。
下載
首先:您需要加入Windows Insider計劃才能獲取 Visual Studio 2015 的最新預覽版和 Windows 10 Preview 的最新版本。立即執(zhí)行-免費。 Windows 10是開發(fā)人員預覽版,不應(yīng)安裝為主要操作系統(tǒng)。
加入Windows Insider程序,然后下載Windows 10技術(shù)預覽版
獲取Visual Studio 2015 Community Edition的預覽版[不再可用]。
Visual Studio 是Microsoft自己的開發(fā)環(huán)境,我們將使用它來創(chuàng)建C#Windows應(yīng)用程序。
為什么要使用C#? 與Java極為相似,它是一種相對簡單的編程語言,對于初學者來說,它可以啟動并運行可運行的應(yīng)用程序,但功能強大到足以繼續(xù)創(chuàng)建一些令人驚嘆的應(yīng)用程序(甚至游戲:C#是Unity腳本語言)選擇-請查看我們的免費電子書,《使用Unity編程游戲的初學者指南》。
如果尚未下載,請從官方Arduino.cc下載 Arduino IDE 。網(wǎng)站,然后將標準固件安裝到板上。您可以在示例-》 Firmata -》 標準固件下找到它。這只是將其變成“啞”串行設(shè)備,它將執(zhí)行我們的應(yīng)用程序告訴它的所有操作–板上本身沒有應(yīng)用程序邏輯,只有我們的應(yīng)用程序與連接到Arduino的任何傳感器或輸出設(shè)備之間的接口
就接線而言,您可以如下所示將LED直接粘貼到引腳13和GND,或者使用板載LED。您還需要將一個可變電阻器(我使用了10k線性電位計)接入A0(顯然,相應(yīng)的支腳也位于GND和+ 5v上)。
最后,從GitHub [不再可用]下載Remote Wiring軟件包。這是我們需要添加的層,它將使我們的Windows應(yīng)用程序能夠與Arduino對話。
創(chuàng)建應(yīng)用程序
繼續(xù)并打開Visual Studio。如果這是您第一次運行它,則可以選擇登錄。如果愿意,請忽略它。選擇 Visual C#作為開發(fā)選項,然后繼續(xù);無論哪種方式,都需要花費幾分鐘的時間來準備首次使用Visual Studio。
使用模板 Visual C#-》 空白應(yīng)用程序(Windows Universal)創(chuàng)建一個新項目)。我稱我為“ Arduino測試”,但這沒關(guān)系。
這時,我遇到了有關(guān)必須將Windows 10切換到Windows 10的錯誤。開發(fā)人員模式(如果我想實際運行該應(yīng)用程序)。繼續(xù)執(zhí)行此操作,盡管如果您發(fā)現(xiàn)Windows 10的構(gòu)建在該設(shè)置下崩潰,則這是一個已知的錯誤,您將需要使用組策略編輯器啟用開發(fā)人員模式。
下一步,右鍵單擊解決方案資源管理器中的任意位置(在右側(cè)),然后選擇添加-》 現(xiàn)有項目。
導航至從Github下載Remote Wiring文件的位置-如果已解壓縮,則應(yīng)為名為 remote-wiring-develop 的文件夾。在其中可以找到 Microsoft.Maker.win10 ;在其中,您會發(fā)現(xiàn)另外3個文件夾。反過來,通過在這三個文件夾中導航并找到項目文件來添加每個文件。
如果收到有關(guān)“找不到XAML 8.2文件”的任何錯誤,則說明您使用的Visual Studio版本錯誤或沒有還沒有安裝開發(fā)人員工具。返回本文開頭,確保已下載并安裝了兩個鏈接的Visual Studio文件。
您剛剛添加的這3個項目只是Arduino界面的不同層。在解決方案資源管理器中,如果右鍵單擊并選擇 Dependencies -》 Build Dependencies ,則可以查看哪些層取決于哪個( Serial 》不依賴任何內(nèi)容; Firmata 依賴于Serial; RemoteWiring 依賴于兩者)。您需要在此處進行的唯一更改是從下拉列表中選擇您的項目,然后選中每個框以表明您的項目依賴于所有其他項目。
最后一步:再次從解決方案資源管理器中,右鍵單擊項目下的參考項目,然后選擇添加參考。從左側(cè)導航到 Windows Universal ,然后在 Microsoft Visual C ++ AppLocal Runtime Package 旁邊打鉤。
下一步導航到 Projects (也在同一對話框的列表中) (在左側(cè)),并選中三個 Microsoft.Maker 項目中的每個項目旁邊的框。
那很難超出了應(yīng)有的程度,但是您只需要執(zhí)行一次即可;現(xiàn)在我們可以從編程中獲得樂趣–我保證這并不可怕。
編程
如果您在后續(xù)操作中遇到困難,可以在Pastebin上找到完整的代碼。無論如何,我還是強烈建議您仔細閱讀下面的說明,以便我可以解釋代碼的實際作用。
首先,我們需要添加一些代碼,表明我們需要USB端口才能與Arduino通信。從解決方案資源管理器中找到 Package.appxmanifest 文件,然后雙擊進行編輯。我們需要在此處粘貼一些代碼–從技術(shù)上講,我們將“插入子節(jié)點”,因為它是一個XML文件,但是只需將整個部分替換為下面的代碼即可,如下所示:
如果您使用的是藍牙,或者針對的是Win8.1而不是10,則確切的代碼會有所不同,但以下內(nèi)容適用于Windows 10,USB連接。
轉(zhuǎn)到構(gòu)建菜單-》 重建解決方案,并確保沒有收到任何錯誤。
從解決方案資源管理器中,展開 MainPage.xaml 節(jié)點。雙擊將加載表單設(shè)計器,稍后我們將返回,但現(xiàn)在打開 MainPage.xaml.cs ,其中包含我們應(yīng)用程序背后的主要邏輯。
在第一部分中添加兩行,以表明我們將“使用” Arduino位。
using Microsoft.Maker.serial;
using Microsoft.Maker.RemoteWiring;
我還添加了一行以表示我們將使用 System.Diagnostics; ,這使我們能夠使用 Debug.WriteLine()函數(shù)將調(diào)試消息輸出到IDE。
首先,讓我們定義一些我們將始終使用的變量。在 public MainPage()函數(shù)聲明之前添加這些行。
UsbSerial connection;
RemoteDevice arduino;
UInt16 lastvalue;
下一步,跳轉(zhuǎn)到MainPage()函數(shù)–這稱為構(gòu)造函數(shù),并且該函數(shù)會在創(chuàng)建我們的應(yīng)用后立即被調(diào)用,因此我們使用它來設(shè)置所有內(nèi)容。
首先,添加一行以建立到特定USB設(shè)備的USB串行連接(
connection =new UsbSerial(“VID_2341”, “PID_0043”);
注意,標準Arduino Uno的USB ID已被編碼到模塊中,但是您可以從設(shè)備管理器進行驗證。 》-》 端口(COM和LPT)-》 Arduino Uno -》 詳細信息選項卡-》 硬件ID 。
然后在其后添加以下幾行。
arduino = new RemoteDevice(connection);
connection.ConnectionEstablished += OnConnectionEstablished;
connection.begin(57600, SerialConfig.SERIAL_8N1);
正在發(fā)生一些事情這里。首先,我們創(chuàng)建一個RemoteDevice對象-記住,這一層為我們提供了許多Arduino命令-并將其命名為“ arduino”。下一行附加到ConnectionEstablished事件,表示“一旦成功建立USB連接,請運行名為OnConnectionCreate()的函數(shù)。”。
最后一個命令使用8N1位模式通知連接已經(jīng)以57600的波特率開始。
您還需要立即創(chuàng)建該OnConnectionEstablished()函數(shù),因此將其移出MainPage()函數(shù),只是制作一個空白函數(shù),如下所示。
private void OnConnectionEstablished()
{
// LOGIC HERE
}
跳回到我前面提到的表單設(shè)計器(如果您忘記了如何:雙擊《解決方案資源管理器中的strong》 MainPage.xaml )。創(chuàng)建兩個按鈕。為此,請打開“工具箱”標簽,該標簽會垂直固定在屏幕左側(cè)。將兩個按鈕拖到頁面上,然后標記為 On 和一個 Off 。
選擇第一個按鈕,然后從右下角的“屬性”框中將其命名為“ OnButton”。單擊小圖標-這是事件和操作列表,用于指定與表單元素進行交互時發(fā)生的情況。在 Click 字段中鍵入“ OnButtonClick”。
按Enter鍵時,它將自動為該特定按鈕事件創(chuàng)建代碼并加載標準代碼視圖。切換回現(xiàn)在是表單設(shè)計者,并且對“關(guān)閉”按鈕執(zhí)行相同的操作,但是這次將其稱為“ OffButton”和“ OffButtonClick”。當您到達那里時,請繼續(xù)并將其后面的主窗口表單命名為“頁面”-我們稍后將使用它?,F(xiàn)在,您應(yīng)該具有類似于以下屏幕截圖的內(nèi)容:
再次切換回設(shè)計器片刻,然后再次對每個按鈕進行設(shè)置 isEnabled 屬性設(shè)置為 False 。您可以通過直接在XAML代碼視圖中鍵入屬性來執(zhí)行此操作,也可以在“屬性”框中找到該復選框(如果仍在“動作”視圖中,則單擊“扳手”),該復選框位于展開的 Common
這不是必需的,但是禁用按鈕是一個好習慣,直到我們確定已插入并連接了Arduino。
要重新啟用它們,將以下內(nèi)容添加到OnConnectionEstablished()函數(shù)?,F(xiàn)在,不必太擔心代碼的確切含義,這只是您應(yīng)該在現(xiàn)代Windows應(yīng)用程序中處理表單更新以確保良好性能的方式。連接到Arduino之后,將按鈕的 IsEnabled 屬性設(shè)置為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個數(shù)字引腳,所以A0從14開始計數(shù))。然后,我們有了另一個事件聲明–當模擬引腳值更新時,調(diào)用函數(shù)MyAnalogPinUpdateCallback。
最后,我們需要編輯按鈕單擊事件,并確定模擬輸入更改時會發(fā)生什么。讓我們從按鈕開始。我們可以使用與常規(guī)Arduino代碼類似的函數(shù)名稱來與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);這使我們能夠檢查該值有多少變化,并且僅在差異顯著時才作出反應(yīng)(一種信號平滑)。如果它在任一方向上的變化都超過5(值的整個范圍是024,那么我們將通過更改Page元素的RGB背景顏色值來做出反應(yīng)。
因為我們只有一個數(shù)字和我一起工作時,我很著急,在這里用制作R,G和B所需的3個數(shù)字對事情稍作改動。您可能會想出一些更漂亮的東西。
完成
就是這樣–運行代碼,您應(yīng)該會看到類似于上面的屏幕截圖的內(nèi)容。這些按鈕將打開和關(guān)閉LED,可變電阻器將改變背景。如果遇到問題,請不要忘記完整的代碼。
責任編輯:wv
-
WINDOWS
+關(guān)注
關(guān)注
4文章
3614瀏覽量
91429 -
應(yīng)用程序
+關(guān)注
關(guān)注
38文章
3337瀏覽量
59042 -
Arduino
+關(guān)注
關(guān)注
190文章
6498瀏覽量
192207
發(fā)布評論請先 登錄
使用Windows Mesh客戶端應(yīng)用程序來觀看CYBT-213043-MESH的環(huán)境溫度信息,如何保存溫度數(shù)據(jù)并將其傳輸?shù)絜xcel嗎?
請問是否可以在通用Windows平臺中構(gòu)建OpenVINO? GenAI C++ 應(yīng)用程序?
基于HPM_SDK_ENV開發(fā)應(yīng)用程序的升級處理

BQ78412應(yīng)用程序編程接口

TAS2521應(yīng)用程序參考指南

android手機上emulate應(yīng)用程序的方法
AWTK-WEB 快速入門(2) - JS 應(yīng)用程序

AWTK-WEB 快速入門(1) - C 語言應(yīng)用程序

使用OpenVINO? ElectronJS中創(chuàng)建桌面應(yīng)用程序

Windows 10將于2025年終止免費更新,微軟力推Windows 11
ADL-GPIB IEEE 488命令集函數(shù)參考手冊
PCM2912應(yīng)用程序的操作環(huán)境

使用OpenVINO GenAI API在C++中構(gòu)建AI應(yīng)用程序

評論