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上有一個模擬輸入(有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
+關注
關注
4文章
3551瀏覽量
88909 -
應用程序
+關注
關注
37文章
3283瀏覽量
57750 -
Arduino
+關注
關注
188文章
6472瀏覽量
187330
發布評論請先 登錄
相關推薦
評論