Stap 4: Schrijven van de Code
Voor dit lab maakt u een nieuw bestand met de naam lab003.js in dezelfde map als in de vorige labs. Er zijn geen extra afhankelijkheden, dus we hoeven niet te wijzigingen aanbrengt in het bestand package.json.
In het lab003.js bestand start door te verklaren de belangrijke voorwerpen, met inbegrip van een variabele voor de LED-pin en de analoge pin zal u (digitale pin 13 voor de LED en analoge pin A0 voor de fotoweerstand - als u nog steeds uw project boord bekabeld uit het vorige labs en vervolgens u helemaal troep zitten moet). U moet ook stub uit de board.on() callback functie voor Johnny vijf.
var five = require("johnny-five"); var board = new five.Board(); var LEDPIN = 13; var ANALOGPIN = 0; board.on("ready", function() { // The next code will go here }); // You will add a couple functions here later in the lab
Binnenkant van de board.on() -functie zal u eerst de digitale pin die u voor de LED als een puls breedte modulatie (PWM) pin gebruiken zal initialiseren.
board.on("ready", function() { // Set pin 13 to PWM mode this.pinMode(LEDPIN, five.Pin.PWM); });
Vervolgens gebruikt u de analogRead() -functie te vangen de gegevens afkomstig van de photoresistor. In Lab 2 schreef u gewoon de gegevens uit het logboek van de console. Voor dit lab zal u de gegevens gebruiken om te bepalen hoe helder de LED moet worden. Het concept is hetzelfde, maar de callback-functie die u deze keer schrijft moet een beetje meer (maar niet veel).
Definieer eerst, de analogRead() -functie en de callback-functie die moet worden aangeroepen als de gegevensinvoer wordt ontvangen. Het formaat is this.analogRead (pinNumber, callbackFunction);
// read the input on analog pin 0: this.analogRead(ANALOGPIN, function(val) { // The next code will go here });
Deze functie geeft de toepassing de gegevens lezen vanaf de analoge pin (0 in dit lab) en input wordt verzameld, roepen de callback functie in het tweede argument als de invoer dat in het val -argument doorgeeft.
Uw doel is het creëren van een toepassing die de helderheid van de LED als de lichte dalingen van de kamer toeneemt. Als er licht op de kamer, u niet wilt dat de LED te verlichten, en hoe donkerder het wordt helderder de gewenste de LED te krijgen. U wilt ook sommige drempel van omgevingslicht waar de LED uitgeschakeld wordt (dat wil zeggen u wilt niet te hebben de LED flauw verlicht in een matig lichte kamer - het gewoon verslijt de LED). De manier om dit te doen is om de kaart van de ingangsspanning van de fotoweerstand naar de uitgangsspanning voor de LED. Er is wel een mismatch. De ingang van de fotoweerstand is in een 16-bits bereik van 0-1023 en de PWM ondersteund door onze Raad van bestuur is een 8-bits bereik van 0 tot en met 255. U kan gewoon de invoerwaarde in tweeën verdelen, maar je moet nog rekening voor de minimumdrempel.
Als u aan het doen waren dit in C met behulp van de Arduino structuren, waarden en functies, zonder gebruik te maken van kaders zoals Johnny-Five, zou u de map() -functie toewijzen van de invoerwaarde in een nieuwe reeks van gegevens, zoals het toewijzen van de analoge input waarde (varieerden tot 0-1023) aan een nieuwe reeks van 0 tot en met 255. U kunt dat hier doen - u hoeft alleen de functie map() om zelf te schrijven. Voeg de volgende code aan de onderkant van het lab003.js-bestand (na het einde van de board.on() functie.
// This function maps a value from one range into another range // Example: map (25, 0, 25, 0, 50) returns 50 // Example: map (20, 0, 100, 0, 10) returns 2 function map(x, in_min, in_max, out_min, out_max) { return Math.round((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min); }
Dit is de exacte formule die wordt gebruikt door de Arduino. Met deze functie kunt u doorgeven in een waarde en zijn voorgedefinieerd bereik, en het gewenste gegevensbereik en het geeft de juiste waarde voor dat bereik.
De map() functie zal negatieve waarden terugkeert, zodat u ook de Arduino constrain() functie, waardoor u om ervoor te zorgen dat de waarde is beperkt tot een minimale en maximale waarde opnieuw moet maken. Voeg de volgende code onmiddellijk na de map() functie.
// This function ensures a value is within a defined range function constrain(x, in_min, in_max) { return Math.round(x < in_min ? in_min : x > in_max ? in_max : x); }
Nu heb je de ondersteunende functies voor map() en constrain() kunt u de callback functie voor de functie van de analogRead() u begonnen met het schrijven binnen de board.on() functie geschreven... Eerst moet u de map() -functie gebruiken om de kaart van de binnenkomende waarde van de fotoweerstand tot een helderheidswaarde voor de LED.
// read the input on analog pin 0: this.analogRead(ANALOGPIN, function(val) { // Map the analog value (0-1023) to an 8-bit value (0-255) // so it can be used to define the LED output. var brightness = map(val, 350, 1023, 0, 255); });
Als u de waarde voor helderheid toegewezen u de binnenkomende gegevens uit een aantal 350-1023 en 0-255. Zodoende u effectief de ambient lichtwaarde van 350 ingesteld op een helderheid van 0 (aangezien 350 op 0 kaarten). Als de waarde vanuit de fotoweerstand onder 350 is dan de functie map() een negatieve waarde als resultaat. Om het potentieel voor een negatieve waarde u kunt beperken de waarde tot het 0-255 variëren met behulp van de functie van de constrain() je schreef.
// read the input on analog pin 0: this.analogRead(ANALOGPIN, function(val) { // Map the analog value (0-1023) to an 8-bit value (0-255) // so it can be used to define the LED output. var brightness = map(val, 350, 1023, 0, 255); // Use the constrain function to ensure the right values brightness = constrain(brightness, 0, 255); });
Dit zal ervoor zorgen dat de waarde van de helderheid tussen 0 en 255.
De laatste stap is het instellen van de waarde van de OUTPUT-pin aan de waarde voor helderheid. In het Lab 1 gebruikt u digitalWrite() aan de uitgang-pins ingesteld op hoog of laag (1 of 0). Aangezien u de OUTPUT van de LED-pin gedefinieerd als een PWM-pin zul je analogWrite() in plaats daarvan gebruiken die de Raad van bestuur om te simuleren van een analoog apparaat met behulp van PWM zal vertellen. U kunt ook een oproep van de console.log() toevoegen voor foutopsporing.
// read the input on analog pin 0: this.analogRead(ANALOGPIN, function(val) { // Map the analog value (0-1023) to an 8-bit value (0-255) // so it can be used to define the LED output. var brightness = map(val, 350, 1023, 0, 255); // Use the constrain function to ensure the right values brightness = constrain(brightness, 0, 255); console.log('val: ' + (val * (5.0 / 1024.0)) + '; brightness: ' + brightness); // Set the brigthness of the LED this.analogWrite(ledPin, brightness); });
Dat is alle code - nu bent u klaar om de toepassing wordt uitgevoerd.