Home > Intermediate Arduino: in- en uitgangen

Intermediate Arduino: in- en uitgangen

Tags:arduino
Advertisement

in- en uitgangen

Voortzetting van mijn Inleiding tot na de Arduino, zal dit Instructable gaan over wat iets meer geavanceerde onderwerpen met Arduino, in het bijzonder met betrekking tot de controle en het beheer van een groot aantal in- en uitgangen. De volgende les wordt beschreven hoe u ingangen en uitgangen van de Arduino te verbinden met MIDI.

Onderdelen lijst:

(1x) Arduino Uno Amazon of u kunt een pick-up op een lokale Radioshack

(1x) usb-kabel Amazon

(1x) broodplank (deze wordt geleverd met een jumper draden) Amazon

(1x) jumper draden Amazon

(8x) rode LEDs Digikey C503B-RCN-CW0Z0AA1-ND

(8x) 220Ohm weerstanden Digikey CF14JT220RCT-ND

(1x) 10kOhm weerstand Digikey CF14JT10K0CT-ND

(1x) tact knop Digikey 450-1650-ND

(1x) 595 schuifregister Digikey 296-1600-5-ND

(1x) rode LED dot matrix Adafruit 454

Stap 1: Blink zonder Delay ()

in- en uitgangen

Tot nu toe hebben we gebruik gemaakt van de vertraging () functie om te pauzeren de Arduino schetsen even, zodat een beetje tijd kan passeren tussen twee Arduino-opdrachten. In de LED-blink sketch, gebruikten we vertraging () om de hoeveelheid tijd die de Arduino was verlicht en de hoeveelheid tijd die het werd uitgeschakeld in te stellen:

digitalWrite (ledPin, HIGH); // slaat LED aan
vertraging (1000); // wachten tot 1000 milliseconden (één seconde)
digitalWrite (ledPin, LOW); // slaat LED uit
vertraging (1000); // wacht een seconde

Soms met behulp van vertraging () is niet een goede optie, omdat de Arduino geen secundaire taken, terwijl de vertraging gebeurt kan uitvoeren. Stel dat we wilden een LED knipperen en op te sporen een druk op de knop op hetzelfde moment met behulp van vertraging ():

lus(){

digitalWrite (ledPin, HIGH);
delay (1000);
digitalWrite (ledPin, LOW);
delay (1000);
boolean buttonState = digitalRead (7);

}

In de bovenstaande code, zijn we alleen het meten van de knop eenmaal per twee seconden, dus het kan duren tot twee seconden voordat een druk op de knop wordt gedetecteerd, en zeer korte persen misschien nooit krijgen helemaal ontdekt.

millis () geeft ons controle over wanneer gebeurtenissen gebeuren zonder dat pauzes in de schets. Elke keer dat we millis () roepen in een Arduino schets, geeft het aantal milliseconden sinds de Arduino werd ingeschakeld.

Voer de volgende code hoe millis zien () werkt:

  // Opnametijd met Arduino millis () void setup () {Serial.begin (9600);  } Void lus () {unsigned long currentMillis = millis ();  Serial.println (currentMillis);  } 

Hier is hoe te millis () gebruiken om een ​​LED knipperen zonder vertraging ().

  // Knipperen geleid zonder vertraging () int ledPin = 7;  int ledState = LOW; // huidige stand van de LED-unsigned long timeOfLastLedEvent = 0; // de laatste keer dat de LED is bijgewerkt int intervalON = 1000; // hoe lang we willen dat de LED op de hoogte blijven int intervalOFF = 500; // hoe lang we willen dat de LED af te blijven void setup () {pinMode (ledPin, output);  digitalWrite (ledPin, ledState);  } Void lus () {unsigned long currentMillis = millis ();  if (ledState == LOW) {// als de LED is al uit als (currentMillis - timeOfLastLedEvent> intervalOFF) {// en genoeg tijd digitalWrite (ledPin, HIGH) is verstreken; // te zetten ledState = HIGH; // slaan zijn huidige toestand timeOfLastLedEvent = currentMillis; // update de tijd van dit nieuwe evenement}} else {// als de LED is al op if (currentMillis - timeOfLastLedEvent> intervalON) {digitalWrite (ledPin, LOW);  ledState = LOW;  timeOfLastLedEvent = currentMillis;  }}} 

De bovenstaande schets introduceert een aantal nieuwe dingen:

unsigned long is een ander type data (tot nu toe hebben we gezien int en boolean ). Unsigned lang is als int, maar grotere, zal ik uitleggen ... Elk type data vereist een bepaalde hoeveelheid ruimte in het geheugen van de Arduino's, en de hoeveelheid ruimte die de Arduino vrijmaakt voor een bepaalde variabele bepaalt de minimale en maximale waarden dat de variabele kan opslaan. Zo kan bijvoorbeeld int variëren van -32.768 tot 32.767, als je probeerde om iets te doen als dit:

int myVariable = 100.000;

Je zou eindigen met een zeer vreemde bug in de code. Dit lijkt misschien een willekeurige reeks, maar het komt uit het feit dat int vereisen 16 bits van de ruimte in het geheugen van de Arduino's, en met 16 bits van binaire kunt u nummers opslaan van 0 tot (2 ^ 16-1) = 65535. Maar mensen besloten dat int moet kunnen negatieve getallen te slaan, zodat een van de bits in het 16 bit getal wordt gebruikt om het teken (positief of negatief) op te slaan en de resterende 15 bit opslaan van de waarde: 2 ^ 15 = 32768. Inclusief 0, komen we uit op het bereik -32.768 tot 32.767. Een ander type data genoemd insigned int niet opslagteken, dus het wordt de 0-65.535 bereik dat ik eerder berekend, maar u kunt een negatief getal niet op een insigned int.

Als we nodig hebben om nummers groter dan 65.535 of minder dan -32768 gebruiken, maken we gebruik van een data soort genaamd lang . Long is toegewezen 32 bits van de ruimte in het geheugen van de Arduino's. 2 ^ 32 = 4294967296, centrum dit rond nul tot een reeks van krijgen: -2147483648 tot 2147483647. Unsigned long's, zoals unsigned int zijn altijd positief, zodat ze variëren van 0 tot en met 4294967295.

Er is geen groter datatype voor het opslaan van nummers dan lang, dus als je nodig hebt om een ​​aantal groter dan 4294967295 op te slaan, moet je om te komen met een andere manier om het op te slaan (misschien de eerste 9 bits in één nummer en de laatste negen in een andere?). Deze beperking heeft interessante consequenties voor de functie millis (). Sinds millis keert unsigned longs, en het is voortdurend tellen in milliseconden, zal millis () daadwerkelijk teruggezet naar nul zodra het bereikt:

4294967295 ms

= 4,294,967seconds

= 49,71 dagen

Als u millis () gebruiken en je van plan bent op het houden van je project lopen voor langere tijd, zonder ooit uit te schakelen of resetten, moet je bewust zijn van deze.

Nog een opmerking over data types: We konden hebben gebruikt lang is of unsigned long is deze hele tijd waarin we verklaren pincodes of andere variabelen in het voorbeeld schetst tot nu toe, maar over het algemeen is het een goed idee om de kleinste data type mogelijkheid gebruiken voor een variabele , op die manier heb je veel extra ruimte in het geheugen van de Arduino voor andere dingen. In Arduino, worden longs zelden gebruikt, maar millis () is een goed voorbeeld van wanneer ze van pas komen.

Om terug te komen van de schets, het algemene idee is om de laatste keer dat je toggled de LED op te slaan of uit te schakelen en dat vergelijken met de huidige tijd wordt geretourneerd door millis (). Zodra het verschil tussen die twee keer groter is dan sommige interval, weet je dat het tijd is om de LED weer te schakelen. Om dit te doen heb ik het opzetten van een aantal nieuwe storage variabelen:

int ledState = LOW; // huidige stand van de LED
unsigned long timeOfLastLedEvent = 0; // de laatste keer dat de LED is bijgewerkt
int intervalON = 1000; // hoe lang we willen dat de LED aan te blijven
int intervalOFF = 500; // hoe lang we willen dat de LED af te blijven

In de lus () is er een heleboel van de logica dat de controles om te zien als er genoeg tijd is verstreken, en zo ja, schakelt de LED, werkt de variabele "timeOfLastLedEvent", en schakelt de opgeslagen toestand van de LED. De logica wordt tweemaal herhaald, eenmaal voor het geval dat de LED is hoog, en eenmaal voor het geval dat de LED laag is, zal ik het LOW geval onder herhalen:

if (currentMillis - timeOfLastLedEvent> intervalOFF) {// en voldoende tijd is verstreken

digitalWrite (ledPin, HIGH); // deze in te schakelen
ledState = HIGH; // store zijn huidige toestand
timeOfLastLedEvent = currentMillis // het moment van deze nieuwe gebeurtenis bijwerken

}

currentMillis is een unsigned long die de huidige tijd dat elke keer loop () functie van de Arduino van start wordt bijgewerkt. (CurrentMillis - timeOfLastLedEvent) geeft de tijd sinus van de LED's staat werd voor het laatst gewijzigd, vergelijken we dit tegen de intervalOFF om te zien of het tijd is de LED uit te schakelen, als het niet de Arduino zal updaten currentMillis houden en opnieuw controle tot het tijd is.

Advertisement

Related Articles

  • Arduino Powered Huis
    Arduino Powered Huis

    *** Ik heb een paar updates voor dit instructable die sinds augustus 2014 *** Ik besloot om deze informatie te delen, zodat anderen die hebben moeite om gelijkaardige dingen doen met hun Arduino zou kunnen helpen. Ik heb pas onlangs gekregen betrokke

  • DIY Arduino Motor Shield (L298N 2x4A)
    DIY Arduino Motor Shield (L298N 2x4A)

    Vandaag ga ik je laten zien hoe je een Arduino motor shield (bestuurder) te maken tegen een lage kostprijs. Het werkt prachtig, zijn bezitten vrijwel alle kenmerken van de oorspronkelijke Arduino motorschild. Het is bijna als een kloon. De originele

  • Arduino, Sensoren, en MIDI
    Arduino, Sensoren, en MIDI

    Nu dat je op snelheid op het gebruik van inputs en outputs Arduino, zal dit Instructable je alles wat je nodig hebt om te beginnen met behulp van sensoren op gang te brengen MIDI-noten van Arduino geven. Dit bericht is de laatste aflevering in een se

  • Eenvoudige Arduino laser alarm
    Eenvoudige Arduino laser alarm

    onderdelen: Arduino (any board) broodplank laser ontvanger module lasermodule LED (elke kleur / kleur) zoemer jumper draden Dingen die je zou willen toevoegen: sirene licht relais om iets te controleren spiegels Stap 1: Bedrading up Zorg eerst dat je

  • Arduino Waveform Generator Shield
    Arduino Waveform Generator Shield

    Golfvormgeneratoren (ook wel functiegeneratoren) bruikbaar voor het testen en debuggen circuits. Ze kunnen worden gebruikt om de frequentierespons van elektronische componenten zoals op versterkers en sensoren te testen of te karakteriseren en oploss

  • Arduino Waveform Generator
    Arduino Waveform Generator

    Golfvormgeneratoren (ook wel functiegeneratoren) bruikbaar voor het testen en debuggen circuits. Ik gebruik ze vaak de frequentierespons van elektronische componenten zoals versterker en sensoren te testen. Deze golfvorm generator wordt aangedreven d

  • GROWMAT domotica
    GROWMAT domotica

    GROWMAT is automatisering unit voor woningen, kassen, velden voor de teelt van fruit, groenten of bloemen. Kan gebruikt worden als standalone automatisering eenheid, de afstandsbediening of het toezicht en de veiligheid systeem en kan uw tijd te besp

  • Zelfbalancerende Upside Down Pendulum
    Zelfbalancerende Upside Down Pendulum

    Dit is mijn poging om de omgekeerde slinger balanceren op een twee-wiel chassis cart. Ik had de anderen hier gezien en werd geïnspireerd om mijn eigen versie te proberen. De Arduino is heerlijk eenvoudig te programmeren en je kunt hem ophalen in een

  • Computer Fan Speed ​​Modifier (in minder dan 30 minuten)
    Computer Fan Speed ​​Modifier (in minder dan 30 minuten)

    Ik ontdekte dat mijn harde schijven warm liepen, dus ik wilde een extra ventilator toe te voegen aan mijn pc. Ik had de perfecte formaat ventilator, dus ik bevestigd in de zaak, verbonden aan de fan header, en dacht dat ik was helemaal klaar, tot mij

  • server WarpCore
    server WarpCore

    !! Kunt u kijken naar de video's, de beelden kunnen zijn beautiy niet uitdrukken :) !! Deze installatie geeft de huidige inkomende internetverkeer met langzaam verdwijnende led verlichting. Hoe meer verkeer we hebben, hoe sneller de lampjes vervagen.

  • PROTEI_007
    PROTEI_007

    Protei_007 is de zevende prototype voor een project genaamd Protei , dat is een open source, gearticuleerd, gesegmenteerd, robotachtig, onbemande, zeilboot, oorspronkelijk gebouwd om tegen de wind in te varen, het slepen van een lange olie-absorberen

  • Multi-Function Survival Solar Gadget op een begroting
    Multi-Function Survival Solar Gadget op een begroting

    Sinds ik mijn laatste instructable gepubliceerd, was ik verbaasd over het gebrek aan populariteit. Ik realiseerde me dat ik nodig had om na te denken over een nieuw ding als ik wil een kans om de Survival Contest te winnen. Ik kwam met dit. Het idee

  • Doorme: Smartphone Controlled Keyless Entry voor dormruimten
    Doorme: Smartphone Controlled Keyless Entry voor dormruimten

    Dit project is voor u als ... A) u ooit per ongeluk uw sleutels opgesloten in uw dorm kamer of appartement, tot grote frustratie van uw persoonlijke trots en / of huisgenoot en / of slotenmaker. B) u op zoek bent naar een goedkope keyless entry syste

  • DIY Animatronic (Foxy Van vijf nachten in Freddy's)
    DIY Animatronic (Foxy Van vijf nachten in Freddy's)

    "Hallo, en welkom welkom bij Cove van de Pirate's" Heb je ooit een video game of tv-personage dat maakte je gewoon denken "Oh man, ik zou het leuk vinden om hen te ontmoeten"? Goed nu kunt u met dit Instructable! Om wat achtergrond te

  • DIY RC Android Sumobot (Sumo Robot)
    DIY RC Android Sumobot (Sumo Robot)

    Maak je klaar voor het echte werk, is het tijd opdringerig te krijgen! Deze week heb ik bouwde een $ 90, Android gecontroleerde bluetooth sumobot. Dit is een leuke manier om tijd door te brengen met je vrienden en deel te nemen in de multiplayer toer

  • Maak je eigen Thirsty Plant grafiek!
    Maak je eigen Thirsty Plant grafiek!

    In dit Instructable we Arduino en Processing om een ​​grafiek plotten met onze vochtsensor, de relatie tussen de MOSFET transistor en de sensor zien. Je zal nodig hebben: DIY Thirsty Plant Kit DIY Start Arduino Kit Sommige jumper draden en / of kroko

  • BOOGIE BOX: De elektromagnetische Dance Floor
    BOOGIE BOX: De elektromagnetische Dance Floor

    De BOOGIE BOX is een interactieve Herprogrammeerbare ding dat kan bijna alles dansen en is leuk om mee te spelen! U kunt uw eigen dansers bouwen en choreograferen hen te dansen op je favoriete muziek. U kunt alles maken! Voeg gewoon de magnetische vo

  • DIY Phone Controlled FPV Rover (Fast & Agile)
    DIY Phone Controlled FPV Rover (Fast & Agile)

    Laten we bouwen aan een Bluetooth / WiFi gecontroleerde FPV Drone! RoverBot is een zeer educatief Arduino gebaseerd ATV-drone. Het is eenvoudig te maken, eenvoudig te programmeren en is een geweldige starter project voor hobbyisten! Het bot is zeer s

  • De Arduino Academy - Les 2 - Basic Uitgangen

    Les 2 van de Arduino Academy waarin we zullen alles leren over Basic uitgangen op de Arduino. Mocht u nog vragen hebben dan laat ze in de comments en ik zal u zo spoedig mogelijk te krijgen. Vergeet niet om je te abonneren. Je kunt me volgen op Twitt