Een beginnersgids voor Arduino (10 / 15 stap)

Stap 10: Communicatie met de computer


Tot op dit punt, we de USB-aansluiting alleen gebruikt voor het uploaden van nieuwe programma's aan de Arduino. Maar we kunnen ook de verbinding gebruiken om gegevens te verzenden van en naar de computer.

Sommige Arduino boards zoals het Leonardo hebben een microcontroller die de USB communicatie alle door haar eigen verzorgt, maar de meeste platen hebben een tweede, kleinere microcontroller, uitsluitend voor de communicatie. Op de Arduino Uno is dit het zwarte vierkantje tussen de USB-connector en de TX-RX LEDs. De communicatie tussen deze chip en de belangrijkste microcontroller wordt gedaan met behulp van een seriële verbinding, dan de tweede chip vertelt de computer 'Hey, ik ben een seriële poort', en dan gewoon de seriële data van de belangrijkste chip omgezet in USB-formaat, en omgezet in de berichten van de computer voor de belangrijkste microcontroller seriële.

Seriële betekent dat bits worden verzonden via de dezelfde draad, een na de ander, overwegende dat parallelle verbindingen 8 bits verzenden of meer gelijktijdig, op afzonderlijke draden (zoals de grote parallel printer-poort op de achterkant van sommige oudere computers).

De Arduino gebruikt twee seriële lijnen: één van de Arduino voor de USB-chip, de verzendlijn (TX) en één regel van de USB-chip aan de Arduino, de lijn van de receive (RX). Deze brieven zijn geschreven naast pin 0 en 1. Dit betekent dat deze pennen gebruikt worden wanneer u de verbinding met de computer, zodat u ze niet kunt voor LEDs of knoppen enz gebruiken. Als u de communicatie weer stopt, kunt alleen u hen als normaal I/O pinnen.
Als u de Arduino verbinden met een ander apparaat dat gebruik maakt van seriële communicatie wilt, moet u ook gebruiken deze twee pinnen.

Ingangen naar de computer verzenden

Open voorbeeld serialButton en uploaden.
De breadboard configuratie is hetzelfde als in de vorige stap.
Open vervolgens de seriële monitor: Tools > seriële Monitor, klik op het vergrootglas in de rechterbovenhoek of hit CTRL + SHIFT + M. maken zeker autoscroll is ingeschakeld en de baudrate is ingesteld op 9600.

Hier ziet u een bos van enen. Nu druk op de drukknop op pin 3 aangesloten, en ziet u nullen. Dit is alleen de ruwe inbreng van de pin.

Open nu de seriële plotter: Tools > seriële Plotter of CTRL + SHIFT + L. Dit zal de waarden uitzetten in een grafiek.

Neem een blik bij de code:

In het Configuratiemenu, voegen we een nieuwe opdracht: Serial.begin(9600). Dit is gewoon om te beginnen de mededeling en de 9600 is de baud-rate, het aantal pulsen per seconde, dus de snelheid van de seriële aansluiting. 9600 is gewoon de standaardwaarde. Als je dit op een andere waarde instelt, hebt u om het te veranderen in de seriële monitor evenals. Anders, zal het worden synchroon, en geven u zeer vreemde karakters. Het tegenovergestelde van Serial.begin(...) is Serial.end(). U kunt dit gebruiken als u pin 1 en 0 als normale I/O om opnieuw te gebruiken hebt, na het gebruik van de seriële aansluiting, maar het wordt niet echt aangeraden.

In de lus ziet u hetzelfde seriële trefwoord, ditmaal met de functie println(...) gebruikt. Dit drukt gewoon de waarde die opgegeven tussen de haakjes, gevolgd door een nieuwe regel (ln).
(Merk op dat dit niet alleen converteren naar een binair getal te sturen over seriële, in plaats daarvan, het wordt geconverteerd naar ASCII, en stuurt het via de seriële poort, zodat de computer kan uitprinten. Als u wilt verzenden van binaire bytes via seriële, gebruik de functie van Serial.write(...) .)

Als u een nieuwe regel, kunt u ook Serial.print(...) samen met de \n (nieuwe regel) of de \r (regelterugloop) tekens, die duiden op een regel die eindigt, in plaats van de ln.

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

De enkele aanhalingstekens aangeven dat er een teken.

Een ander speciaal teken is de \t (tabblad), laten we het gebruiken voor het afdrukken van de ingangen van beide schakelaars. Dit is de voorbeeld serial2Buttons. Uploaden en open de seriële monitor om het resultaat te zien.

Arduino Referentie: seriële

Verzenden van opdrachten naar de Arduino

De mededeling werkt ook andersom: laten we een programma schrijven naar besturingselement LEDs van de computer.
Open de voorbeeld serialLEDs.

Uploaden, open de seriële monitor en proberen het verzenden van waarden tussen 0 en 3. Nu verzenden 4. Krijgen hoe het werkt?
Laten we check de code:

De setup ziet er vrij vertrouwd, behalve één opdracht: dit is een while-lus. Een while-lus wordt herhaald, zolang de voorwaarde tussen de haakjes waar is (je kan vergelijken met een for-lus, maar zonder het eerste en het laatste argument, alleen de toestand.) Ik expliciet de gekromde haken wordt gebruikt om aan te geven is een lus, maar u kunt ook gewoon een puntkomma in plaats daarvan: tijdje (! Serieel);
Seriële methode retourneert true als de seriële communicatie actief is (wanneer u de seriële monitor, bijvoorbeeld opent). Dus als we een niet-operator (!) toevoegt, wordt met de expressie waar is als de mededeling niet actief is. Zo houdt de while-lus herhalen terwijl de mededeling niet actief is, en in wezen wacht deze actief worden. We weten dan dat kunnen we beginnen met het verzenden van gegevens met de functie println(...). Als we niet zou de while-lus gebruiken om te wachten, verliezen sommige boards zoals het Leonardo (en andere platen met USB-mogelijkheden in de belangrijkste chip) zal enkel de eerste gegevens. Het probeert te sturen naar de computer, maar niets er luistert voor seriële input.

In de lus, er is een andere nieuwe verklaring: de if-statement, dit is waarschijnlijk de meest belangrijke verklaring in computerwetenschappen. Het doet precies wat de naam al aangeeft: het wordt uitgevoerd een stukje code, alleen wanneer een bepaalde voorwaarde voldaan wordt. Anders wordt de code tussen de gekromde haken genegeerd.

Nu neem ik een moment om te verklaren hoe de Arduino seriële berichten ontvangt:
Zoals ik al eerder heb uitgelegd, stuurt seriële een beetje na de andere, byte voor byte. Dit betekent dat uw bericht, "test", bijvoorbeeld, wordt opgesplitst in stukken van 1 byte. Een karakter is een byte in grootte, zodat het iets als 't kijken zal ' 'e' van ' 't' wanneer u het via seriële verzendt. Wanneer de Arduino deze bytes ontvangt, zal het hen slaan in een buffer (maar een klein stukje van het geheugen naar het tijdelijk op te slaan). Het ontvangt het byte voor byte, zodat de buffer er iets als dit ziet "" (lege) "t", "te", "tes" "test".
Wanneer de buffer leeg is, de Serial.available() -functie als resultaat 0 als er gegevens in de buffer heeft ontvangen, het geeft het aantal bytes in de buffer, dus 4 in dit geval. Als u de functie Serial.read() aanroept, zal het lezen van de eerste byte ('t ') uit de buffer, verwijdert u deze uit de buffer en verschuiven van de buffer, dat daarin nu "est" en Serial.available() als 3 resultaat. Als u Serial.read() aanroept opnieuw, 'e' wordt geretourneerd, en de buffer zullen "st". U kunt blijf lezen totdat Serial.available() gelijk is aan nul. (Als u weten van de eerste byte wilt zonder daarbij zo te verwijderen, kunt u de functie van Serial.peek() .)

Zo de eerste if(Serial.available > 0) zal controleren of er geen gegevens in de buffer. Als dat zo is, zal het lezen van de eerste byte en opgeslagen in de variabele serialValue. Het zal dan controleren of de waarde die het alleen lezen is '0'. Opmerking de enkele aanhalingstekens, geeft dit teken nul (ASCII: ' 0' = 48), en niet 0 als waarde, aangezien de seriële monitor als tekst verzonden. Als de waarde '0' is, dooft het beide LED's. Als de waarde niet '0', code in de sectie 'anders is' zal uitvoeren: dus het nu controleren zal als de waarde is '1', zo ja, hij draait op de eerste LED en verandert van de tweede. Als er geen '1' ofwel, zal het controleren als het is '2', als zo, het draait op de tweede LED en u de eerste schakelt. Als er geen '2', zal het controleren als het '3', zo ja, blijkt op beide LEDs, anders wordt de code uitgevoerd in de laatste anders sectie en drukt welke waarden u moet invoeren.

U kunt het stroomdiagram in de afbeelding als de verklaring niet duidelijk genoeg was.

Merk op dat een dubbele gelijkheidsteken wordt gebruikt om te controleren of twee waarden hetzelfde. Als u een enkele gelijkteken, zou gebruiken (als (serialValue = '0')) het zal niet iets te controleren, het zal slechts een waarde van '0' toewijzen aan de variabele serialValue. Dit is een zeer vaak voorkomende fout.

Andere operatoren te testen waarden zijn < (minder dan) > (groter dan) < = (minder dan of gelijk aan) > = (groter dan of gelijk aan)! = (niet gelijk aan).
Binnenkant van de if-instructie, ook kunt u logische operatoren (Booleaanse operatoren), meerdere voorwaarden controleren: & & (en) || (of)

Enkele voorbeelden:

5 > 3 → waar
5 < 3 → onwaar
3 > 3 → onwaar
3 > = 3 → true
5! = 3 → true
3 == 3 → waar

om te controleren als een waarde is x tussen 1 en 100:

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

een andere manier van schrijven van dit (niet aanbevolen, net als een voorbeeld)

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

U kunt proberen om erachter te komen hoe het werkt zelf, en neem vervolgens contact op met de tabellen van de waarheid in de afbeelding hierboven.

Opmerking: Net als in de wiskunde, haakjes worden gebruikt om aan te geven de volgorde van bewerkingen, bijvoorbeeld in de laatste uitdrukking, ' x < 1' zal getest worden eerst, vervolgens ' x > 100', vervolgens ' ||', en tot slot '!'.

Arduino Referentie: terwijl

Arduino Referentie: als (en vergelijkings-operatoren)

Arduino Referentie: anders

Arduino Referentie: Booleaanse operatoren

_

Samenvatting

  • Meeste Arduinos hebben een tweede chip voor USB-communicatie. Deze chip communiceert met de belangrijkste microcontroller met behulp van een seriële verbinding.
  • Seriële betekent dat een beetje na de andere, één filter tegelijk wordt verzonden. Er is een verzendlijn en een lijn ontvangen (TX en RX respectievelijk).
  • Hier kunt u de seriële Monitor (CTRL + SHIFT + M) en de seriële Plotter (CTRL + SHIFT + L) te laten zien van de gegevens dat is het verzenden van de Arduino, en gegevens te sturen naar de Arduino.
  • Serial.begin(baud); begint de seriële communicatie met de computer. De standaard-baudrate is 9600.
  • Serial.end(); Hiermee beëindigt u de seriële communicatie.
  • Serial.Print(text); tekst wordt afgedrukt op de computer, het kan worden gelezen in de seriële monitor/plotter. Merk op dat de getallen worden geconverteerd naar ASCII: b.v. Serial.print(0); stuurt een seriële waarde van 48 (ASCII-code voor het nul karakter).
  • Serial.println(text); hetzelfde als het afdrukken, maar zal een nieuwe regel toevoegen na het bericht.
  • '\n' is een nieuwe-regelteken, '\r' is een harde return, en "\t" is het tab-teken (voor inspringingen)
  • Serial.write(byte); geeft een ruwe byte via seriële. Bijvoorbeeld, Serial.write(48); een 0-teken in de seriële monitor afgedrukt.
  • while(Condition) {...} is de while-lus genoemd. Code tussen de accolades zal worden uitgevoerd en herhaald zolang de voorwaarde tussen gewone haakjes waar is.
  • Seriële methode retourneert true als de seriële communicatie actief is (wanneer u de seriële monitor, bijvoorbeeld opent).
  • tijdje (! Serieel); Herhaal 'niets' (Lees ' wachten') zal zolang de seriële communicatie niet actief.
  • if(condition) {if-code} else {anders-code} zal het als-code uitvoeren als de voorwaarde waar is, en de anders-code uitvoeren als de voorwaarde onwaar is.
  • Seriële data ontvangen door de Arduino is opgeslagen in een buffer, het blijft daar totdat je het lezen of totdat de buffer overloopt.
  • Serial.available(); Deze eigenschap retourneert het aantal bytes dat beschikbaar is in de buffer.
  • Serial.Read(); zal u terug de eerste byte in de buffer en daarna verwijderen.
  • Serial.Peek(); geeft de eerste byte in de buffer, zonder het te verwijderen.
  • In uw voorwaarden, kunt u deze testen exploitanten: == (gelijk aan), < (minder dan), > (groter dan), < = (kleiner dan of gelijk aan), > = (groter dan of gelijk aan),! = (niet gelijk aan).
  • En u kunt ook de logische gebruiken & & (en) en || (of) exploitanten.

Extra: Switch

In het laatste voorbeeld, gebruikten we een heleboel als... anders verklaringen. Dit is de snelste manier om het te doen, maar het is niet gemakkelijk te lezen. Als u een variabele sommige bepaalde waarden vergelijken wilt, kunt u een schakelen.

Open de voorbeeld serialLEDsSwitch.

Zoals u zien kunt, wordt de schakeloptie begint met de 'schakelaar' sleutelwoord, gevolgd door de variabele die u wilt controleren tussen haakjes. Tussen de gekromde haken, worden onze cases gedefinieerd. Ze gebruiken de syntaxis ' waarde van dezaak : ", gevolgd door de code die u uitvoeren wilt als de opgegeven variabele gelijk is aan de waarde in dit 'geval'. Na de zaak-specifieke code, de 'pauze;' wordt sleutelwoord gebruikt om te sluiten van de 'case'.
Merk op dat de waarde die u invoert niet een variabele kan worden. Als u vergelijken 2 variabelen wilt, moet je als-instructies gebruiken.
De code in de 'standaard:' geval wordt uitgevoerd als de variabele niet overeenkomt met een van de waarden van andere gevallen. Deze draagtas is optioneel en kan worden weggelaten.

Arduino Referentie: switch / kast

Gerelateerde Artikelen

Een beginnersgids voor Kolrosing, door een beginner.

Een beginnersgids voor Kolrosing, door een beginner.

* Dit is mijn inzending voor de wedstrijd "Houtbewerking". Als je van wat ik hier heb gedaan gelieve te stemmen! Bedankt! *Dus je zo ongeveer klaar met uw houtbewerkingsproject bent, hebt misschien je gemaakt enkele lepels, een mooie doos, een m
Visie: Een fakkel voor de personen met gezichtsstoornissen

Visie: Een fakkel voor de personen met gezichtsstoornissen

Visie is een apparaat van de fakkel gevormd om te helpen blinden navigeren met meer comfort, snelheid en vertrouwen, terwijl maken gebruik van ultrasone golven te detecteren in de buurt van hindernissen en hoogte te stellen van de gebruiker door midd
Digitale multimeter shield voor Arduino

Digitale multimeter shield voor Arduino

Dit instructable beschrijft een schild, die "Arduino" board in een digitale multimeter (DMM converteert).Het schild kan worden ingevoegd in "Arduino" UNO und Duemilanove planken. Het kan werken in drie modi:standalone - de meting gegev
How to Build een schild voor de Linkit One

How to Build een schild voor de Linkit One

Hallo mensen! Pure koolstof hier met een ander Instructable. Vandaag zal ik u tonen hoe te bouwen van een aangepaste schild voor het Linkit één Board. Voordat we in dat krijgen maar moet ik u vertellen waarom ik ging op dit streven in de eerste plaat
Een Absolute beginnersgids voor de Intel Edison

Een Absolute beginnersgids voor de Intel Edison

Hey daar! Onlangs ontving ik een Intel Edison board van Instructables, als een aardige gift. Als je afvraagt wat dat is, is de Intel Edison een kleine computer de grootte van een SD-kaart (dat is serieus klein), voor elektronica en computer hobbyiste
ArduDroid: Een eenvoudige 2-weg Bluetooth gebaseerde Androïde Controller voor Arduino

ArduDroid: Een eenvoudige 2-weg Bluetooth gebaseerde Androïde Controller voor Arduino

UPDATES:19 nov. 2031: advies: de fantastische synergie tussen Arduino & Android.30 oktober 2013: Andruino is nu officieel ARDUDROID en zal binnenkort beschikbaar op Google Play. Deze naamswijziging te vermijden conflict met een andere app op Google P
Het maken van een androïde toepassing voor Arduino (LED Turn on/off)

Het maken van een androïde toepassing voor Arduino (LED Turn on/off)

hier hebben we een androïde toepassing die gebruikmaakt van ecllipsedeze toepassing inschakelen leidde op arduino.deze toepassing werkt ook in je LAN.Hardware vereist:1: arduino uno2: arduino ethernet Shield3: RJ45-kabel4: LED5. android telefoonDe so
SensoDuino: Zet uw Androïde telefoon in een draadloze sensoren Hub voor Arduino

SensoDuino: Zet uw Androïde telefoon in een draadloze sensoren Hub voor Arduino

UPDATES23 november 2013: SensoDuino 0.160 krijgt een links.19 nov. 2031: advies: de fantastische synergie tussen Arduino & Android.19 november 2013: SensoDuino 0.159 is uit. Android telefoon datum (y, m, d) en tijd (h, m, s) worden ondersteund als se
Gemakkelijk, omkeerbare Motor controle voor Arduino (of een Microcontroller)

Gemakkelijk, omkeerbare Motor controle voor Arduino (of een Microcontroller)

dit project maakt gebruik van slechts drie hoofdcomponenten voor voorwaartse en omgekeerde bepalen voor een interne motor.  U kunt het gemakkelijk interface naar een Arduino of elke andere microcontroller.Het is zo eenvoudig - u kunt het draad van "f
AVRSH: Een tolk opdrachtshell voor Arduino/AVR.

AVRSH: Een tolk opdrachtshell voor Arduino/AVR.

Ooit wilde worden "aangemeld" bij uw AVR microcontroller? Ooit gedacht dat het zou gaaf zijn aan de "kat" een register om te zien van de inhoud ervan? Hebt u altijd al wilde een manier om de nodige energie en individuele perifere sub-s
Een Complete gids voor Onboard Jumpers op de Intel Edison kit voor Arduino

Een Complete gids voor Onboard Jumpers op de Intel Edison kit voor Arduino

De Intel® Edison kit voor Arduino kunt de Intel® Edison verenigbaar met Arduino shields ontworpen voor de UNO R3. De Arduino Expansion Board omvat verschillende jumper headers configureren van de Raad van bestuur met verschillende instellingen zoals
Een kleine Tea Timer (TTT) machine voor Arduino en ATtiny

Een kleine Tea Timer (TTT) machine voor Arduino en ATtiny

De TinyTeaTimmer (TTT) is een implementatie voor een kleine accessoire die gemakkelijk kan worden gemonteerd en geprogrammeerd d.m.v. een schakelaar, een knop, 1 of 2 LED's, een kleine servomotor en een Arduino board of een ATTiny-processor.De schets
Een gids voor het beheren van dingen met wisselende inbreng (via arduino)

Een gids voor het beheren van dingen met wisselende inbreng (via arduino)

het hart van dit project is een) aansluiten van een sensor op de analoge ingang van de arduino en b) programmeren met de if... else-statement.dit specifieke project toont een computer koelsysteem te handhaven bepaalde temperatuur binnen een computer
Een gids voor Raspberry Pi Arduino mededeling in Embedded systemen

Een gids voor Raspberry Pi Arduino mededeling in Embedded systemen

Dit is een gids voor verschillende methoden voor communicatie tussen de Raspberry Pi en Arduino. Deze handleiding is gemaakt van alles wat die ik heb geleerd van de oprichting van een forest capaciteiten. De post van het project kan worden gezien, ee