En nybörjares guide till Arduino (10 / 15 steg)

Steg 10: Kommunikation med datorn



Fram till denna punkt för vi bara USB-anslutningen för att ladda upp nya program till Arduino. Men vi kan också använda anslutningen för att skicka data från och till datorn.

Vissa Arduino styrelser som Leonardo har en mikrokontroller som hanterar USB-kommunikation alla av sina egna, men de flesta styrelser har en andra, mindre mikrokontroller, enbart för kommunikation. På Arduino Uno är detta en liten svart ruta mellan USB-kontakten och TX-RX lysdioderna. Kommunikationen mellan detta chip och huvudsakliga mikrokontroller är gjort med en seriell anslutning, då den andra kretsen berättar datorn "Hej, jag är en seriell port", och sedan helt enkelt konverterar den seriella data från de viktigaste chipet till USB-format, och konverterar meddelanden från datorn till följetong för huvudsakliga mikrokontroller.

Seriella innebär att bits skickas över samma tråd, en efter en, medan parallellkoppling skicka 8 bitar eller flera samtidigt, på separata ledningar (som den stora parallell skrivarporten på baksidan av vissa äldre datorer).

Arduino använder två seriella linjer: en från Arduino att USB-chipet, transmit linjen (TX) och en linje från USB-chip till Arduino, ta emot linjen (RX). Dessa brev skrivs intill pin 0 och 1. Detta innebär att dessa stift är i användning när du har anslutningen till datorn som kör, så du inte kan använda dem för lysdioder eller knappar etc. Om du slutar meddelandet igen, kan du bara använda dem som vanligt I/O pins.
Om du vill ansluta Arduino till en annan enhet via seriell kommunikation, måste du också använda dessa två stift.

Skicka ingångar till datorn

Öppna exempel serialButton och ladda upp den.
Set av brödunderläggen konfigurationen är densamma som i föregående steg.
Öppna sedan den seriella monitor: Verktyg > Serial Monitor, klicka på förstoringsglaset i övre högra hörnet eller tryck CTRL + SKIFT + M. göra säker autoscroll aktiveras och baud är inställd på 9600.

Här ser du en massa ettor. Nu tryck på knappen ansluten till stift 3 och du ser nollor. Detta är bara raw input från stiftet.

Nu öppnar seriell plotter: Verktyg > seriell Plotter eller CTRL + SKIFT + L. Detta kommer att pricka in värdena i ett diagram.

Låt oss ta en titt på koden:

I uppsättning, vi lägger till ett nytt kommando: Serial.begin(9600). Detta är bara att börja meddelandet, och 9600 är överföringshastigheten, antalet pulser per sekund, så hastigheten för seriell anslutning. 9600 är bara standardvärdet. Om du anger detta till ett annat värde, måste du ändra det i följetong monitor också. Annars kommer det vara synkroniserad och ger dig mycket konstiga tecken. Motsatsen till Serial.begin(...) är Serial.end(). Du kan använda detta när du har för att använda stift 1 och 0 som normala I/O igen, efter att ha använt seriell anslutning, men det är inte rekommenderas.

I slingan ser du samma seriella sökord, denna tid används med funktionen println(...) . Detta skriver bara ut de värden som anges inom parentes, följt av en ny rad (ln).
(Observera att detta inte bara konvertera den till ett binärt skicka det via seriell, istället det konverteras till ASCIIoch skickar det sedan över seriell, så att datorn kan skriva ut den. Om du vill skicka binära bytes över följetong, använda funktionen Serial.write(...) .)

För att få en ny rad, kunde du också använda Serial.print(...) tillsammans med tecknet \n (ny rad) eller tecknet \r (vagnretur), som indikerar en linje slut, i stället för ln.

Serial.Print(digitalRead(3));
Serial.Print('\n');

De enkla citattecken anger att det är en karaktär.

En annan speciell karaktär är \t (tab), låt oss använda den för att skriva ut både växlar ingångar. Detta är exempel serial2Buttons. Ladda upp den och öppna den seriella monitorn för att se resultatet.

Arduino referens: seriell

Skicka kommandon till Arduino

Kommunikationen fungerar även tvärtom: Låt oss skriva ett program för att kontrollera lysdioderna från datorn.
Öppna exempel serialLEDs.

Ladda upp den, öppnar den seriella bildskärmen och försök skicka värden mellan 0 och 3. Nu skicka 4. Får hur det fungerar?
Låt oss kolla in koden:

Installationen ska se helt bekant, utom ett kommando: detta är en tag-loop. En tag-loop upprepas, så länge villkoret mellan hakparenteserna är Sant (man kan jämföra den till en for-loop, men utan det första och sista argumentet, bara villkoret.) Jag uttryckligen används krökt parenteser för att indikera det är en loop, men du kunde också använda semikolon i stället: tag (! Seriell);
Seriella returnerar true när den seriell kommunikationen är aktiv (när du öppnar seriell övervaka, till exempel). Så om vi lägger till en inte-operatör (!), om uttrycket är sant när kommunikationen inte är aktiv. Så tag-loop håller upprepa medan kommunikationen inte är aktiv, och i huvudsak väntar på att bli aktiva. Då vet vi att vi kan börja skicka data med funktionen println(...). Om vi inte skulle använda de tag-loop vänta, förlora vissa styrelser som Leonardo (och andra styrelser med USB-funktioner i de viktigaste chipet) kommer bara den första data. Det att försöka skicka det till datorn, men inget där lyssnar för seriell in.

I slingan, det är en annan ny uttalande: i if-satsen, detta är förmodligen det viktigaste uttalandet i datavetenskap. Den gör precis vad namnet antyder: en bit kod, körs endast när ett visst villkor är sant. Annars ignoreras kod mellan krökt parenteser.

Nu ska jag ta en stund att förklara hur Arduino tar emot meddelanden som följetong:
Som jag förklarade tidigare, skickar följetong en bit efter den andra, byte för byte. Detta innebär att ditt budskap, "test", till exempel får delas upp i bitar på 1 byte. Ett tecken är en byte i storlek, så det kommer att se något liknande 't' 'e' ' 't' du skickar det via seriell. När Arduino får dessa byte, kommer den lagra dem i en buffert (bara en liten bit av minnet att tillfälligt lagra den). Det mottar det byte för byte, så bufferten kommer att se ut så här "" (tom) "t", "te", "tes" "test".
När bufferten är tom, funktionen Serial.available() returnerar 0, om det har fått data i bufferten, återgår antalet byte i bufferten, så 4 i det här fallet. Om du ringer funktionen Serial.read() , det kommer att läsa den första byten ('t ') från bufferten, ta bort den från bufferten, och flytta bufferten, så att den innehåller nu "est", och Serial.available() returnerar 3. Om du ringer Serial.read() igen, den kommer tillbaka "e" och bufferten kommer att vara "st". Du kan hålla läsa tills Serial.available() är lika med noll. (Om du vill veta den första byten utan att ta bort det medan du gör, kan du använda funktionen Serial.peek() .)

Så den första if(Serial.available > 0) kommer att kontrollera om det finns data i bufferten. Så, kommer att det läsa den första byten, och lagrar det i variabeln serialValue. Då kommer att det kontrollera om det bara läsa värdet '0'. Observera de enkla citattecken, detta anger tecknet noll (ASCII: ' 0' = 48), och inte 0 som ett värde, eftersom seriell monitorn skickar det som text. Om värdet är "0", kommer att det stänga av båda led. Om värdet är inte '0', kod i avsnittet 'annat' kommer att utföra: så det kommer nu kontrollera om värdet är '1', om så är fallet, det vänder på första LED och vänder andra. Om det inte är '1' heller, kommer att det kontrollera om det är "2", om så det blir på andra LED, och stänger av den första en. Om det inte är "2", kommer att det kontrollera om det är "3", så, det visar på båda LED, annars det körs koden i avsnittet förra annat, och skriver ut vilka värden du ska ange.

Flödesschemat i bilden kan du kontrollera om förklaringen inte var tillräckligt tydlig.

Observera att en dubbel jämställdhet tecken används för att kontrollera om två värden är samma. Om du skulle använda en enda likhetstecknet (om (serialValue = "0")) det inte kommer att kolla något, det kommer bara tilldela värdet '0' till den variabla serialValue. Detta är ett mycket vanligt misstag.

Andra operatörer att testa värdena är < (mindre än) > (större än) < = (mindre än eller lika med) > = (större än eller lika med)! = (inte lika med).
Inne i din if-uttalande, du kan också använda logiska operatorer (booleska operatorer), att kontrollera flera villkor: & & (och) || (eller)

Några exempel:

5 > 3 → sant
5 < 3 → falskt
3 > 3 → falskt
3 > = 3 → true
5! = 3 → true
3 == 3 → true

för att kontrollera om värdet är x mellan 1 och 100:

(1 < = x) & & (x < = 100)

ett annat sätt att skriva det här (rekommenderas inte, bara som ett exempel)

! ((x < 1) || (x>100))

Du kan försöka lista ut hur det fungerar själv och så kolla med sanning bordlägger i bilden ovan.

Obs: Precis som i matematik, parentes används för att ange utförs, till exempel i förra uttrycket "x < 1' kommer att prövas först, sedan ' x > 100", sedan "||", och slutligen '!'.

Arduino referens: medan

Arduino referens: om (och jämförelseoperatorer)

Arduino referens: annat

Arduino referens: booleska operatorer

_

Sammanfattning

  • De flesta Arduinos har en andra kretsen för USB-kommunikation. Detta chip kommunicerar med den huvudsakliga microcontroller med en seriell anslutning.
  • Följetong innebär att en bit skickas efter den andra, en i taget. Det finns en sändnings linje och en ta emot linje (TX och RX respektive).
  • Du kan använda den Serial Monitor (CTRL + SKIFT + M) och seriell plottern (CTRL + SKIFT + L) Visa data Arduino skickar, och att skicka data till Arduino.
  • Serial.BEGIN(baud); startar den seriell kommunikationen med datorn. Standard överföringshastigheten är 9600.
  • Serial.end(); slutar den seriell kommunikationen.
  • Serial.Print(text); skriver ut texten till datorn, man kan läsa i den seriella monitor/plottern. Observera att siffror konverteras till ASCII: e.g. Serial.print(0); skickar ett serievärde 48 (ASCII-koden för noll karaktär).
  • Serial.println(text); samma som print, men kommer att lägga till en ny rad efter meddelandet.
  • "\n" är ett radmatningstecken, '\r' är en vagnretur och "\t" är tabbtecknet (för indrag)
  • Serial.write(byte); skickar en rå byte över följetong. Till exempel, Serial.write(48); skriver ut en 0-tecken i följetong monitor.
  • while(Condition) {...} är kallas tag-slingan. Kod mellan klammerparenteserna kommer att utföras och upprepas så länge villkoret normala parentes är sant.
  • Seriella returnerar true när den seriell kommunikationen är aktiv (när du öppnar seriell övervaka, till exempel).
  • tag (! Följetong); kommer att upprepa "ingenting" (Läs "vänta") så länge den seriell kommunikationen är inte aktiv.
  • if(condition) {if-code} annat {annat-koden} kommer att köra om-koden om villkoret är sant, och köra annat-koden om villkoret är falskt.
  • Seriella data tas emot av Arduino lagras i en buffert, det stannar där tills du läst den eller de buffertspill.
  • Serial.available(); Returnerar antal byte i bufferten.
  • Serial.Read(); kommer tillbaka den första byten i bufferten, och ta bort den efteråt.
  • Serial.PEEK(); kommer tillbaka den första byten i bufferten, utan att ta bort den.
  • Du kan använda dessa i dina villkor, testa operatörer: == (lika med), < (mindre än), > (större än), < = (mindre än eller lika med), > = (större än eller lika med),! = (inte lika med).
  • Och du kan också använda den logiska & & (och) och || (eller) operatörer.

Extra: Switch

I det sista exemplet, vi använde en hel del om... annat uttalanden. Detta är det snabbaste sättet att göra det, är det inte lätt att läsa. Om du vill jämföra en variabel till vissa givna värden, kan du använda en Växla.

Öppna exempel serialLEDsSwitch.

Som ni kan se, börjar växeln med nyckelordet "switch", följt av den variabel som du vill kontrollera inom parentes. Mellan de böjda parenteserna definieras våra fall. De använder syntaxen "fallet värde:", följt av den kod du vill köra om en viss variabel är lika med värdet i detta "fall". Efter den fall-specifika koden, "break;" används sökord att stänga "fallet".
Observera att värdet du anger inte kan vara en variabel. Om du vill jämföra 2 variabler, måste du använda if-satser.
Koden i den "standard:" fallet utförs om variabeln inte matchar någon av värdena för andra fall. Detta fall är valfri och kan utelämnas.

Arduino referens: växla / mål

Se Steg
Relaterade Ämnen

Nybörjare guide till installera och konfigurera Octoprint på en Raspberry pi för 3D utskrift

Om du har läst någon av mina andra instructables, mest namnkunniga komplett nybörjare steg för steg, 3D-skrivare med alla delar listor, vet du att jag kommer ihåg min egen frustration på ofullständiga instruktioner och guider även efter jag äntligen...

En nybörjare Guide till 35mm Film fotografering

Hej alla! Jag har nyligen verkligen kommit in film fotografering efter min far gav mig sin gamla Pentax K1000. Jag är relativt ny på film fotografering köpa har lärt mig en hel del hittills.Målet med detta Instructable är att ge en detaljerad, lätt a...

Nybörjare Guide till fotografi

detta instructable är för nybörjare, och tar dig genom 1) lätt saker att fotografera2) utveckla bilder för att vara anständig (oroa dig inte det är mycket lätt jag lärde min stora mormor att göra det)Steg 1: utrustning Om du har en trevlig kamera med...

En nybörjares Guide till Photoshop

jag gjorde denna guide till Photoshop med hjälp av programmet sig på min hem laptop. Det har varit ett projekt som jag har velat ta itu med eftersom jag har hittat liknande guider inte har inkluderat några av viktig information.Jag har gjort digital...

En nybörjare guide till setup ESP8266 med Arduino Mega 2560 eller Uno

För produkter med öppen källkod för att lyckas eller anta en masse "skaparna" / "DIY-na" / "dev" / "etc"; en aktuell och korrekt dokumentation eller snabbstart-guide som skall krävas. Användarens inlägg i diskussion...

En nybörjare Guide till Raw-filer och Raw-bearbetning

En av de första sakerna jag lärt mig om i fotografi var om en filtyp som kallas en Raw-fil. Ofta när någon börjar i fotografi, inser han eller hon inte potentialen i Raw-filer. Först såg jag inte användning för raw-filer, de tycktes erbjuda något som...

En nybörjares Guide till XSplit programföretag och Streaming på Twitch.tv (Windows 10)

IntroduktionLive Streaming är en växande bransch där alla och envar kan dela deras spelupplevelse med världen. Om du bara titta på andra spela och prata med din favorit serpentiner i chatten, eller live streaming själv, Twitch.tv skapar en enorm, sam...

Nybörjare Guide till fiberoptik

Fiberoptik! Fiberoptik! Jag är visserligen lite besatt med fiberoptik, och av goda skäl. De är en slitstark, mångsidig och relativt enkelt sätt att lägga till vackra ljuseffekter till något du gör. Titta bara på några av de underbara projekt kan du s...

En nybörjares Guide till Stirlingmotorer

Förra året var jag en IB elev i MYP programmet. I slutet av året hade vi att göra ett forskningsprojekt om något som intresserar oss. Göra lite forskning på internet, kom jag över något som kallas en Stirlingmotor."Så, vad i helsike är en Stirlingmot...

En nybörjares Guide till papper skära

Här är en enkel guide för att komma igång att göra papper nedskärningar.Jag har gjort dem i flera år nu och har upptäckt att de är ett riktigt bra sätt att göra en vacker kort, särskilt när tiden är mot dig. Jag gör detta varje gång en födelsedag ell...

En nybörjares guide till Kolrosing, av en nybörjare.

* Detta är mitt inträde till tävlingen "Trä". Om du gillar vad jag har gjort här rösta! Tack! *Så du är nästan färdig med din woodworking projekt, har kanske du gjort några skedar, en trevlig låda, en vacker skärbräda eller några otherreally coo...

En komplett nybörjare guide till airsoft

denna guide är inte som andra instructables, denna guide innehåller allt du behöver veta för att gå ut och ha lite kul. Nu, tack vare några tips kommenterade denna sida, jag kommer att lägga till lite nya grejer... Kolla upp det!Steg 1: Komma igång A...

Nybörjare Guide till Airsoft

så du vill starta airsoft det är en rolig sport för att ta upp jag tycker det är ett steg från sittande runt att få fett spelar TV-spel. Men innan du går ut och köpa en hel kostym av redskap och toppmodellen airsoft vapen du behöver ställa dig själv...

Nybörjares Guide till att köpa Airsoft Field Gear

Så du har köpt din AEG, men din blå jeans har inte tillräckligt fickor för att hålla alla dessa extra tidningar. Det är dags att köpa några nya redskap.Problemet med att köpa nya redskap är att jag kan inte berätta exakt vad du ska köpa.Chanserna är...

Nybörjare guide till Morel svamp

Det är en helgdag som finns i såväl landsbygden söder som Mellanvästern som bara känns igen av lokalbefolkningen: svamp säsong. Det finns en uppsjö av svamp som växer under hela året, det finns bara en svamp som gör det en nödvändighet för hårt arbet...

En nybörjare Guide till spela gitarr Del1

Hej alla! Jag kommer idag att vad man ska packa i ditt gitarr fall.Steg 1: #1. Strängar En bra uppsättning strängar är lifesavers du behöver dem!Steg 2: #1. Tuner Det är uppenbart vad du gör med detta. : DSteg 3: #3. Plockar och Capo Dessa kommer i h...

Nybörjarens guide till ESP8266 och tweeting med ESP8266

Jag lärde mig om Arduino 2 år sedan. Så började jag spela runt med enkla saker som lysdioder, knappar, motorer etc. Då tänkte jag skulle inte det vara häftigt att ansluta för att göra saker som visar dagens väder, aktiekurser, träna timings på en LCD...

Arduino Anti Theft Alarm (med polis Siren): Komplett nybörjares Guide

Är du rädd för tjuvar som kan stjäla alla dina projekt??? :) :) Då detta den perfekta INSTRUCTABLE för dig. Detta är ett stöldskydd larm. När det finns ingen tjuv runt, sedan en blå LED kommer att blekna på och av; men om en tjuv försöker passera av...

Bygga en DIY Quadcopter: en nybörjare Guide

Detta är ett riktigt kort klipp på min quadcopter svävar upp och ner och rörelse i sidled. Jag försökte hålla höjden så minimal som möjligt eftersom jag är inne i mitt vardagsrum, men som ni kan se, även med som det flyger upp till huvudet (ca 6 fot)...