Étape 4: Écriture du Code
Pour cet exercice, vous allez créer un nouveau fichier nommé lab003.js dans le même répertoire que vous avez fait dans les laboratoires de la précédentes. Il n’y a pas de dépendances supplémentaires, nous n’avez pas besoin d’apporter des modifications au fichier package.json.
Dans le fichier lab003.js commencer par déclarer les objets clés, y compris une variable pour la goupille de la LED et la broche analogique que vous utiliserez (broche numérique 13 pour la LED et la broche analogique A0 pour la photorésistance - si vous avez encore votre planche projet filaire vers le haut des laboratoires précédents, alors vous devriez être tous ensemble). Vous devriez également talon sur la fonction de rappel board.on() de Johnny Five.
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
À l’intérieur de la fonction board.on() vous initialisera tout d’abord la broche numérique que vous utiliserez pour la LED comme une épingle de modulation (PWM) de largeur impulsion.
board.on("ready", function() { // Set pin 13 to PWM mode this.pinMode(LEDPIN, five.Pin.PWM); });
Ensuite, vous utiliserez la fonction analogRead() pour capturer les données provenant de la photorésistance. Dans le Lab 2 vous simplement écrit les données dans le journal de console. Pour cet atelier, vous utiliserez les données pour déterminer la luminosité des LED devrait être. Le concept est le même, mais la fonction de rappel que vous écrivez cette fois aura un peu plus (mais pas beaucoup).
Tout d’abord, définir la fonction analogRead() et la fonction de rappel qui sera appelée lors de l’entrée de données est reçue. Le format est this.analogRead (pinNumber, callbackFunction) ;
// read the input on analog pin 0: this.analogRead(ANALOGPIN, function(val) { // The next code will go here });
Cette fonction indique à l’application pour lire les données de la broche analogique (0 dans ce laboratoire) et lorsque l’entrée est collectée, appeler la fonction de rappel dans le deuxième argument et passer la dat d’entrée dans l’argument de val .
Votre objectif est de créer une application qui augmente la luminosité de la LED comme les baisses de lumière ambiante. Si il est léger dans la salle, vous ne voulez pas la LED s’allume, et le plus sombre il obtient plus vous voulez la LED pour obtenir. Vous voulez aussi un seuil de lumière ambiante où la LED s’éteint (c'est-à-dire, vous ne voulez pas avoir la LED faiblement éclairée dans une pièce modérément claire - il juste s’use la LED). La façon de procéder consiste à mapper la tension d’entrée à la tension de sortie de la photorésistance pour la LED. Il y a une incompatibilité. L’entrée de la photorésistance est dans une gamme de 16 bits de 0-1023 et le PWM pris en charge par notre Conseil d’administration est une gamme de 8 bits de 0 à 255. Vous pouvez simplement diviser la valeur d’entrée dans la moitié, mais vous avez encore besoin tenir compte du seuil minimal.
Si vous faisiez cela en C en utilisant les structures Arduino, valeurs et fonctions, sans utiliser les frameworks tels que Johnny-cinq, vous pouvez utiliser la fonction map() mapper la valeur d’entrée dans une nouvelle plage de données, telles que la cartographie de la valeur d’entrée analogique (varie de 0-1023) à une nouvelle gamme de 0 à 255. Vous pouvez le faire ici - il suffit d’écrire la fonction map() vous-même. Ajoutez le code suivant à la fin du fichier lab003.js (après la fin de la fonction board.on() .
// 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); }
Il s’agit de la formule exacte utilisée par l’Arduino. Cette fonction vous pouvez passer une valeur et son aire de répartition prédéfinie, et la plage souhaitée et elle retournera la valeur appropriée pour cette gamme.
La fonction map() retournent des valeurs négatives vous devez également recréer la fonction constrain() Arduino, qui vous permettra de s’assurer que la valeur est limitée à une valeur minimale et maximale. Ajoutez le code suivant immédiatement après la fonction map() .
// 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); }
Maintenant, la vous avez écrit les fonctions support pour map() et constrain() , vous pouvez écrire la fonction de rappel pour la fonction analogRead() , vous commence à écrire à l’intérieur de la fonction board.on() ... Tout d’abord, vous devez utiliser la fonction map() pour mapper la valeur entrante de la photorésistance pour une valeur de luminosité de la 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); });
Lorsque vous définissez la valeur de luminosité vous mappé les données entrantes allant de 350-1023 à 0-255. Ce faisant, vous définissez efficacement la valeur de lumière ambiante de 350 à un éclat de 0 (puisque 350 cartes à 0). Si la valeur en provenance de la photorésistance est inférieure à 350 alors la fonction map() retournera une valeur négative. Pour tenir compte de la possibilité d’une valeur négative, vous pouvez contraindre la valeur pour les 0-255 rang à l’aide de la fonction constrain() , vous avez écrit.
// 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); });
Cela garantira que la valeur de luminosité est comprise entre 0 et 255.
La dernière étape consiste à définir la valeur de l’axe de sortie à la valeur de luminosité. Lab 1, vous avez utilisé digitalWrite() pour affecter à l’axe de sortie soit haute ou basse (1 ou 0). Étant donné que vous avez défini la broche de sortie LED comme une goupille PWM vous allez utiliser analogWrite() au lieu de cela, qui nous dira le jury pour simuler un appareil analogique à l’aide de PWM. Pour des fins de débogage, vous pouvez également ajouter un appel de console.log() .
// 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); });
C’est tout le code - vous êtes maintenant prêt à exécuter l’application.