Arduino: Input regelt Output (3 / 4 stap)

Stap 3: Schrijven van de Code

Een nieuwe schets maken met behulp van de Arduino IDE .

Voorafgaand aan de Setup-functie, declareert u variabelen voor de analoge pin verbonden met de photoresistor en de digitale pin verbonden aan de LED.

 //Photoresistor Pinint analogPin = 0; // LED Pin int ledPin = 9; 

Voor deze firmware hoeft u niet om iets te plaatsen in de installatiemethode. Normaal gesproken zou u de digitale pen declareren als OUTPUT met behulp van de functie pinMode(), echter we gaan worden met behulp van de analogWrite()-functie, waarvoor de pin te worden verklaard als een uitgang niet.

In de loop-functie zal u beginnen met de lezing in het lichtniveau van de fotoweerstand met behulp van dezelfde code uit de vorige les.

 void loop() { // put your main code here, to run repeatedly: // read the raw data coming in on analog pin 0: int lightLevel = analogRead(analogPin); } 

Vervolgens zal u de binnenkomende lichtniveau converteren naar het juiste bereik voor de LED. Hiervoor gebruikt u twee nieuwe functies - map() en constrain().

De functie van de kaart heeft vijf Invoerargumenten - de waarde, een lage waarde en een hoge waarde van het huidige bereik, en een lage waarde en een hoge waarde voor het doelbereik.

 int val = map(value, fromLow, fromHigh, toLow, toHigh); 

Dit alles opnieuw een waarde uit een bereik naar de equivalente waarde in een ander bereik hebt toegewezen. Bijvoorbeeld, de kaart (25, 0, 50, 0, 100) 50 zou terugkeren (50 is het equivalent in de 0-100 tot 25 binnen het bereik van 0-50). In deze les brengt u in de lightLevel kaart (een 0-1023 bereik) naar een PWM bereik (0-255). Een andere manier van accompishing zou hetzelfde doel in dit geval de lightLevel waarde delen door 4 (0-255 is op vierde van 0-1023), maar als je dat deed, je zou niet krijgen om te leren van de map() functie. Bovendien, omdat u niet dat uw nachtlampje wilt te zijn op, bij sommige licht (bijvoorbeeld weinig licht) zal u wilt wijzigen van het bereik van de lightLevel. Bijvoorbeeld, in mijn kantoor de waarde lightLevel is ongeveer 340 wanneer de lichten op (het is niet een zeer heldere kantoor). Ik wil dit behandelen alsof er genoeg licht dat de LED niet moet worden verlicht, dus ik niet de LED brandt ben als de lichten ingeschakeld zijn. Om dit te doen, kaart ik het bereik van de lightLevel als 350-1023.

 void loop() { // put your main code here, to run repeatedly: // read the raw data coming in on analog pin 0: int lightLevel = analogRead(analogPin); // re-map the value from the analog pin to a smaller range // Experiment with the right fromLow level based on your environment int brightness = map(lightLevel, 350, 1023, 0, 255); } 

U zult moeten experimenteren met dit te vinden van het beste bereik te gebruiken (herinner me, kunt u de seriële monitor in de vorige les vindt u de onbewerkte waarde vanuit de fotoweerstand).

Het bereik van de lightLevel met behulp van een lage waarde die hoger is dan een waarde die u zou kunnen worden invoeren in kaart te brengen kan resulteren in een negatief getal (bijvoorbeeld in mijn voorbeeld, de lightLevel zou 340 hoewel ik het lage einde van het bereik bij 350 geïdentificeerd). U kunt de constrain() functie gebruiken om te beschermen tegen het instellen van helderheid op een negatief getal.

De constrain()-functie neemt in drie Invoerargumenten - de waarde, een lage waarde en een hoge waarde.

 int val = constrain(value, lowValue, highValue); 

Als de waarde tussen de lowValue en de highValue is, zal wordt de waarde worden geretourneerd. Als de waarde lager is zal de lowValue, dan lowValue worden teruggegeven. Als de waarde hoger is dan highValue, zal dan highValue worden teruggegeven.

Met behulp van de functie van de constrain() u ervoor u zorgen kunt niet op een slechte waarde helderheid ingesteld. Nu dat je de waarde van een goede helderheid kunt u de functie analogWrite() om in te stellen van de PWM voor de LED-pin. Een helderheidswaarde van 0 is een taakcyclus van 0% (uit) en een helderheidswaarde van 127 is een taakcyclus van 50%, enz.

 void loop() { // put your main code here, to run repeatedly: // read the raw data coming in on analog pin 0: int lightLevel = analogRead(analogPin); // re-map the value from the analog pin to a smaller range // Experiment with the right fromLow level based on your environment int brightness = map(lightLevel, 350, 1023, 0, 255); // use constrain to avoid negative numbers and/or numbers above the high range brightness = constrain(brightness, 0, 255); // use analogWrite to send PWM data (a square wave) analogWrite(ledPin, brightness); } 

Gerelateerde Artikelen

Aansluiten van een Sensor met Audio Input en Output

Aansluiten van een Sensor met Audio Input en Output

een sensor behoort tot een hoeksteen voor het vastleggen van de fysieke omgeving. Kan je de verandering van licht met een fotocel cd's, kunt u de ruimte te meten met een afstandssensor en u kunt uw beweging vastleggen met een versnellingsmeter.Er zij
Aansluiten een Fader met Audio Input en Output

Aansluiten een Fader met Audio Input en Output

een fader behoort tot een basiscomponent voor mengpaneel. U kunt dynamisch uw bron met de beweging van een fader.Er zijn al verschillende manier om drukknoppen gebruiken in uw projecten (b.v. hacken muis en toetsenbord of Arduino, gainer, MCK). Deze
Aansluiten een drukknop met Audio Input en Output

Aansluiten een drukknop met Audio Input en Output

een drukknop behoort tot een hoeksteen voor het vastleggen van uw actie. U kunt dynamisch op een knop om iets te doen.Er zijn al verschillende manier om drukknoppen gebruiken in uw projecten (b.v. hacken muis en toetsenbord of Arduino, gainer, MCK).
Beginner Arduino

Beginner Arduino

De Arduino is een zakformaat computer (ook wel een "microcontroller") die u kunt programmeren en gebruik om te controleren van de circuits. Deze samenwerkt met het buiten woord door middel van sensoren, LED's, motoren, sprekers... zelfs op het i
Arduino-controlled RGB LED Infinity spiegel

Arduino-controlled RGB LED Infinity spiegel

Update 11/22/2013: dank aan iedereen die gestemd voor dit project in de Microcontroller-wedstrijd! Het was een van de drie winnaars van de eerste-prijs.9/17/2013 update: dank aan iedereen die gestemd voor dit project in de wedstrijd van de Arduino (i
Arduino, sensoren en MIDI

Arduino, sensoren en MIDI

Nu dat je op snelheid over het gebruik van de Arduino inputs en outputs, krijgt dit Instructable u alles wat die u aan de slag met behulp van sensoren wilt om trigger MIDI aantekeningen van Arduino. Dit bericht is de laatste aflevering in een serie v
Eenvoudige Arduino laser alarm

Eenvoudige Arduino laser alarm

Delen:Arduino (alle board)breadboardLaser ontvangersmodulelaser moduleLED (elke kleur kleuren)zoemerjumper dradenDingen die u kunt toevoegen:Sirene lichtdoorsturen van berichten naar de controle van enig dingspiegelsStap 1: Bedrading upControleer eer
Quiz-O-Tron 3000: Arduino quiz deelnemer lockout systeem

Quiz-O-Tron 3000: Arduino quiz deelnemer lockout systeem

Als u ooit hebt bekeken een TV-quiz show heeft u waarschijnlijk gezien deelnemers willen druk op een knop om te winnen een kans om een vraag te beantwoorden. De snelle reactietijd van de deelnemer resulteert in een soort van licht en/of geluid die ov
Maak een schild Arduino Mega

Maak een schild Arduino Mega

De Arduino-platform biedt een krachtige reeks van hulpmiddelen voor het maken van interactieve elektronische apparaten. Bedrading van een breadboard is voor vele projecten, alles wat nodig is. Maar hebt u meer ambitieuze plannen voor de ontwikkeling
Pong klok

Pong klok

Maart 2014 Update! Versie 5.1 van de code is uit met bug fixes en een mooie kleine letters lettertype. Get it terwijl het heet! De link is op de laatste pagina van dit instructable!Deze klok maakt gebruik van het klassieke videospel Pong de tijd te v
Multifunctionele Survival zonne-Gadget op een begroting

Multifunctionele Survival zonne-Gadget op een begroting

Sinds ik mijn laatste gepubliceerd instructable, ik was verbaasd over het gebrek aan populariteit. Ik realiseerde me dat ik denken aan een nieuw ding moest als ik wil een kans om te winnen de overleven wedstrijd.Ik kwam met dit. Het idee kwam enkel w
GROWMAT home automation

GROWMAT home automation

GROWMATis automatisering unit voor huizen, serres, velden voor groeiende vruchten, groenten of bloemen. Kan gebruikt worden als standalone automatisering unit, afstandsbediening of toezicht en veiligheid systeem en bespaart je tijd, omdat kunt werken
UMIO: Universele Morse Input/Output Device

UMIO: Universele Morse Input/Output Device

UMIO is een goedkope ondersteunende apparaat voor doof-blinde gebruikers en gebruikers met mobiliteitsproblemen kunnen voldoen, om te gaan en tekst te lezen. Het kan een gebruiker gebruik van één enkele toets aan inputtekst als morse code. Tekst word
Arduino flat analoge/digitale input panel.

Arduino flat analoge/digitale input panel.

Dit is hoe maak je een arduino aangedreven LCD-invoer/uitvoer-monitorStap 1: materialen.Dit zijn de dingen die u nodig heeft.Arduino UNO.DFRobot 1602 LCD keypad schild (het hoeft niet te worden deze exacte type, je hoeft alleen te weten de pin-out).C