Sådan opretter du en Windows 10 Arduino -app (for absolutte begyndere)

Sådan opretter du en Windows 10 Arduino -app (for absolutte begyndere)

Microsoft går all in til Windows 10 og realiserer endelig drømmen om at have apps, der kører på tværs af platforme. Kombineret med officiel support til Arduino har du et kraftfuldt nyt værktøj til rådighed: muligheden for nemt at oprette universelle Windows -apps, der har en hardwareforbindelse til den virkelige verden.





Sådan kommer du i gang, selvom du aldrig har programmeret en Windows -app før.





Inden du læser videre, skal du tjekke demoen om, hvad vi skal lave.





Jeg skal bemærke, at jeg ikke har brugt Visual Studio eller endda rørt ved C#siden cirka 10 år siden. Jeg kommer til dette fra perspektivet af en ny Visual Studio -installation og har glemt alt, hvad jeg ved.

Hvis du allerede er ganske erfaren med Windows -app -programmering, eller endda leder efter en enkel måde at komme i gang med programmering i Windows uden disse Arduino -ting, kan du prøve Ryan's guide til at lave en simpel Visual Basic -app . Absolutte programmeringsbegyndere vil måske først tjekke min programmerings 101 (og del 2) artikel.



Du burde være bekendt med nogle nybegynder Arduino projekter (og måske endda læse vores Arduino guide ), men dette vil sandsynligvis være første gang, du har forsøgt at oprette en rigtig bit computersoftware til at interagere med det.

Downloads

Først: du skal deltage i Windows Insider -program for at få den seneste preview -udgave af Visual Studio 2015 , og den nyeste build af Windows 10 -forhåndsvisning . Gør det nu - det er gratis. Windows 10 er et udviklereksempel og bør ikke installeres som dit hovedoperativsystem. Det er buggy som helvede.





  • Deltag i Windows Insider -program , og download Windows 10 Technical Preview
  • Få en forhåndsvisning af Visual Studio 2015 Community Edition [ikke længere tilgængelig].

Visual Studio er Microsofts eget udviklingsmiljø, som vi vil bruge til at oprette et C# Windows -program.

Hvorfor C#? Med stærke ligheder med Java er det et relativt let programmeringssprog for begyndere at få en fungerende app i gang, men alligevel kraftfuld nok til at du kan fortsætte med at lave nogle fantastiske applikationer (selv spil: C# er det foretrukne Unity -scriptsprog - tjek ud vores gratis e -bog, Nybegynderguide til programmering af et spil med enhed ).





Hvis du ikke allerede har gjort det, skal du downloade Arduino IDE fra embedsmanden Arduino.cc websted, og installer standard firma på tavlen. Du finder det under Eksempler -> Underskrevet -> Standardfirma . Dette gør det bare til en 'dum' seriel enhed, der vil gøre, hvad vores app fortæller den til - der vil ikke være nogen applogik på selve kortet, kun en grænseflade mellem vores app og eventuelle sensorer eller outputenheder, der er forbundet til Arduino .

Med hensyn til ledninger kan du enten sætte en LED direkte på pin 13 og GND som nedenfor, eller bruge den indbyggede LED. Du skal også bruge en variabel modstand (jeg har brugt et 10k lineært potentiometer), der går ind i A0 (med de passende ben på GND og +5v også).

Hent endelig pakken Remote Wiring fra GitHub [No Longer Available]. Dette er det lag, vi skal tilføje, som gør det muligt for vores Windows -app at tale med Arduino.

Opret en applikation

Gå videre og åbn Visual Studio. Hvis det er første gang, du kører det, får du mulighed for at logge ind. Ignorer det, hvis du vil. Vælge Visual C# som udviklingsmulighed og fortsæt; i begge tilfælde tager det et par minutter at forberede Visual Studio til første brug.

hvordan man skærmbillede på snap uden at de ved det

Opret et nyt projekt ved hjælp af skabelonen Visual C# -> Tom app (Windows Universal) . Jeg kaldte min 'Arduino Test', men det gør ikke noget.

På dette tidspunkt stødte jeg på en fejl om at skulle skifte Windows 10 til udviklertilstand, hvis jeg rent faktisk ville køre appen. Fortsæt og gør dette, men hvis du finder, at din build af Windows 10 går ned på denne indstilling, er det en kendt fejl, og du skal brug gruppepolitikeditoren til at aktivere udviklertilstand .

Højreklik derefter hvor som helst i Solution Explorer (det er tingen til højre) og vælg Tilføje -> Eksisterende projekt .

Naviger til det sted, hvor du downloadede Remote Wiring -filer fra Github - hvis det er blevet pakket ud, skal det være en mappe, der hedder fjernbetjening-udvikle . Derinde finder du Microsoft.Maker.win10 ; og inde i det finder du yderligere 3 mapper. Til gengæld kan du tilføje hver enkelt ved at navigere inde i de tre mapper og finde projektfilen.

Hvis du modtager fejl om 'XAML 8.2 -fil ikke fundet', har du den forkerte version af Visual Studio eller har ikke udviklerværktøjerne installeret endnu. Gå tilbage til starten af ​​denne artikel, og sørg for, at du har downloadet og installeret begge de sammenkædede Visual Studio -filer.

Disse 3 projekter, du lige har tilføjet, er bare forskellige lag af Arduino -grænsefladen. Fra løsningsudforskeren, hvis du højreklikker og vælger Afhængigheder -> Byg afhængigheder , kan du se hvilke lag, der afhænger af hvilke ( Seriel afhænger ikke af noget; Underskrevet afhænger af Serial; Fjernbetjening afhænger af begge dele) . Den eneste ændring, du skal foretage her, er at vælge dit projekt fra rullemenuen og markere hvert felt for at angive, at dit projekt afhænger af alle disse andre projekter.

Et sidste trin: Højreklik på løsningsudforskeren igen Referencer element under dit projekt, og vælg Tilføj reference . Naviger til venstre fra Windows Universal , og marker derefter feltet ud for Microsoft Visual C ++ AppLocal Runtime -pakke . Luk ikke dialogen endnu.

Naviger derefter til Projekter (også på den samme dialogboks fra listen til venstre), og markér feltet ud for hver af de tre Microsoft.Maker projekter.

Det var sværere end det burde være, men du behøver kun at gøre det én gang; nu kan vi hygge os med programmeringen - jeg lover, at det ikke er så skræmmende.

Programmering

Hvis du har problemer med at følge med, den fulde kode er tilgængelig på Pastebin . Jeg foreslår på det kraftigste at læse noterne herunder alligevel, så jeg kan forklare, hvad koden rent faktisk gør.

Først skal vi tilføje en smule kode, der siger, at vi har brug for en USB -port for at kommunikere med Arduino. Find Package.appxmanifest fil fra løsningsudforskeren, og dobbeltklik for at redigere den. Vi skal indsætte noget kode her - teknisk set vil vi 'indsætte en barneknude', fordi det er en XML -fil, men bare erstatte hele sektionen med koden herunder, så det ser sådan ud:

Den nøjagtige kode vil variere, hvis du bruger Bluetooth, eller hvis du målretter mod Win8.1 i stedet for 10, men følgende er for en Windows 10, USB -forbindelse.








Gå til Byg menu -> Genopbyg løsning , og sørg for, at du ikke får fejl.

Fra løsningsudforskeren skal du udvide MainPage.xaml knudepunkt. Dobbeltklik på det vil indlæse formdesigneren, som vi vender tilbage til senere, men åbner for nu MainPage.xaml.cs , som indeholder hovedlogikken bag vores applikation.

Tilføj to linjer i det første afsnit for at angive, at vi 'bruger' Arduino -bitene.

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

Jeg tilføjede også en linje for at sige, at vi skal bruge System.Diagnostik; som gør os i stand til at bruge Debug.WriteLine () funktion til at udsende fejlfindingsmeddelelser til IDE.

Lad os først definere et par variabler, vi vil bruge hele vejen igennem. Tilføj disse linjer lige før offentlig hovedside () funktionserklæring.

UsbSerial connection;
RemoteDevice arduino;
UInt16 lastvalue;

Derefter hopper du ind i funktionen MainPage () - dette kaldes konstruktøren, og det er en funktion, der bliver kaldt med det samme, når vores app er oprettet, så vi bruger den til at konfigurere alt.

Tilføj først en linje for at oprette den serielle USB -forbindelse til en bestemt USB -enhed (Arduino).

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

Bemærk, at USB -id'erne for en standard Arduino Uno allerede er kodet i blokken, men du kan bekræfte dette fra Enhedshåndtering -> Porte (COM og LPT) -> Arduino uno -> detaljer fane -> Hardware -id'er .

Tilføj derefter følgende linjer lige efter det.

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

Der sker et par ting her. Først opretter vi et RemoteDevice -objekt - husk, det er det lag, der giver os en masse Arduino -kommandoer - og giver det variabelnavnet 'arduino'. Den næste linje er vedhæftet til ConnectionEstablished -hændelsen 'når USB -forbindelsen er oprettet, skal du køre funktionen kaldet OnConnectionEstablish ()'.

Finalen fortæller bare, at forbindelsen allerede skal starte med en baudhastighed på 57600 ved hjælp af 8N1 bit mønster .

Du skal også oprette funktionen OnConnectionEstablished () nu, så gå uden for funktionen MainPage () og lav bare en tom funktion som følger.

private void OnConnectionEstablished()
{
// LOGIC HERE
}

Gå tilbage til den formular, jeg nævnte tidligere (hvis du har glemt hvordan: dobbeltklik på MainPage.xaml fra løsningsudforskeren). Opret to knapper. For at gøre dette skal du åbne fanen Værktøjskasse, som du finder fastgjort lodret i venstre side af skærmen. Træk to knapper ind på siden, og mærk derefter en og en Af .

Vælg den første knap, og navngiv den derefter fra 'Egenskaber' nederst til højre. Klik på det lille lynikon - dette er listen over begivenheder og handlinger, der bruges til at angive, hvad der sker, når formelementer interageres med. Skriv 'OnButtonClick' i Klik på Mark.

Når du trykker på enter, opretter den automatisk koden til den pågældende knaphændelse og indlæser standardkodevisningen. Skift tilbage til formdesigneren for nu og gør det samme for knappen Fra, men denne gang kalder den 'OffButton' og 'OffButtonClick'. Mens du er der, skal du fortsætte og navngive hovedvinduesformularen bag det som 'Side' - det bruger vi senere. Du skal nu have noget, der ligner skærmbilledet herunder:

Skift tilbage til designeren igen et øjeblik, og igen for hver af knapperne, indstil er aktiveret ejendom til Falsk . Du gør enten dette ved at skrive ejendommen direkte i XAML -kodevisningen, eller du kan finde afkrydsningsfeltet i feltet Egenskaber (klik på skruenøglen, hvis du stadig er i handlingsvisningen) - det er under den udvidede almindelige kategori af ejendomme.

Dette er ikke vigtigt, men det er god praksis at deaktivere knapperne, indtil vi er sikre på, at Arduino er tilsluttet og tilsluttet.

For at genaktivere dem skal du tilføje følgende til funktionen OnConnectionEstablished (). Du skal ikke bekymre dig for meget om den nøjagtige betydning af koden for nu, det er bare den måde, du skal håndtere formopdateringer i moderne Windows -apps for at sikre god ydeevne. Når vi har oprettet forbindelse til Arduino, indstiller vi Er aktiveret knappernes egenskab til sand.

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));
}

Du vil også se en mere kendt pinMode () sætning, for at sige, at vi har en analog indgang på pin 14 (der er 13 digitale pins, så A0 begynder at tælle fra 14). Så har vi en anden hændelseserklæring - når den analoge pinværdi opdateres, skal du kalde funktionen MyAnalogPinUpdateCallback.

Endelig er vi nødt til at redigere knappens klikhændelser og beslutte, hvad der sker, når den analoge indgang ændres. Lad os starte med knapperne. Vi kan interagere med Arduino ved hjælp af lignende funktionsnavne som almindelig Arduino -kode som følger:

arduino.digitalWrite(13, PinState.HIGH);

Indsæt det for onButton -begivenheden, og dette for offButton:

arduino.digitalWrite(13, PinState.LOW);

Enkel. Det analoge input fra Arduino er lidt vanskeligere, men her er hvad jeg fandt på.

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;
}

Bemærk, at jeg gemmer den tidligere værdi, vi modtog fra nålen, i en variabel kaldet lastValue; Dette gør det muligt for os at kontrollere, hvor meget værdien ændres, og kun reagere, hvis forskellen er betydelig (en slags signaludglatning). Hvis det ændrer sig i begge retninger mere end 5 (0-1024 er hele værdiområdet), reagerer vi ved at ændre RGB-baggrundsfarveværdien for sideelementet.

Da vi kun har ét nummer at arbejde med, og jeg havde travlt, fuskede jeg lidt med tingene her med de 3 tal, der kræves for at gøre R, G og B. Du kan sikkert finde på noget meget smukkere.

Færdig

Det er det - kør koden, og du skal se noget, der ligner skærmbilledet ovenfor. Knapperne tænder og slukker LED'en, og den variable modstand ændrer baggrunden. Hvis du havde problemer, så glem ikke den fulde kode er her .

Nu hvor du kan skrive dine egne Windows 10 -apps, der interagerer med Arduino, hvad vil du lave? Måske en hjemmeautomatiseringskontroller? Lad mig vide i kommentarerne.

Del Del Tweet E -mail Sådan ændres udseendet og følelsen af ​​dit Windows 10 -skrivebord

Vil du vide, hvordan du får Windows 10 til at se bedre ud? Brug disse enkle tilpasninger til at gøre Windows 10 til din egen.

Læs Næste
Relaterede emner
  • gør det selv
  • Programmering
  • Arduino
Om forfatteren James Bruce(707 artikler udgivet)

James har en bachelor i kunstig intelligens og er CompTIA A+ og Network+ certificeret. Når han ikke har travlt som Hardware Reviews Editor, nyder han LEGO, VR og brætspil. Inden han kom til MakeUseOf, var han belysningstekniker, engelsklærer og datacenteringeniør.

Mere fra James Bruce

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for at få tekniske tips, anmeldelser, gratis e -bøger og eksklusive tilbud!

Klik her for at abonnere