Étape 3: Écrire le Code
À l’aide de l' IDE Arduino créer une nouvelle esquisse.
Avant la fonction setup(), déclarez les variables pour la broche analogique relié à la photorésistance et la broche numérique relié à la LED.
//Photoresistor Pinint analogPin = 0; // LED Pin int ledPin = 9;
Pour ce firmware vous n’avez pas besoin de mettre quoi que ce soit dans la méthode d’installation. Normalement, vous déclareriez la broche numérique en sortie à l’aide de la fonction pinMode(), mais nous allons utiliser la fonction analogWrite(), qui ne nécessite pas la goupille pour être déclarées comme sortie.
Dans la fonction loop(), vous allez commencer par la lecture dans le niveau de luminosité de la photorésistance utilisant le même code de la dernière leçon.
void loop() { // put your main code here, to run repeatedly: // read the raw data coming in on analog pin 0: int lightLevel = analogRead(analogPin); }
Ensuite, vous convertirez le niveau de lumière entrant à la plage correcte de la LED. Pour ce faire, vous utiliserez deux nouvelles fonctions - map() et constrain().
La fonction map possède cinq arguments d’entrée - la valeur, une valeur faible et une valeur élevée de la gamme actuelle et une valeur faible et une valeur élevée pour la plage cible.
int val = map(value, fromLow, fromHigh, toLow, toHigh);
Tout cela n’est re-mapper une valeur d’une plage en la valeur équivalente dans une autre plage. Par exemple, la carte (25, 0, 50, 0, 100) retournerait 50 (50 est l’équivalent dans le 0-100 vont à 25 dans la plage 0-50). Dans cette leçon, vous allez mapper l’éclairement (un 0-1023 gamme) à une gamme PWM (0-255). Une autre façon d’accompishing le même objectif dans ce cas serait de diviser la valeur de l’éclairement par 4 (0-255 est le quatrième des 0-1023), mais si vous l’avez fait, vous n’obtiendriez pas d’apprendre la fonction map(). En outre, parce que vous ne voulez pas votre veilleuse pour être sur quand il y a peu de lumière (p. ex., faible luminosité), vous voudrez modifier la plage d’éclairement. Par exemple, dans mon bureau la valeur d’éclairement est environ 340 lorsque les lumières sont allumées (ce n’est pas un bureau très lumineux). Je tiens à le traiter comme s’il y a assez de lumière que le voyant ne doit pas s’allumer, donc je brûle pas la LED quand les lumières sont allumées. Pour ce faire, je mappe la plage d’éclairement comme 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); }
Vous devrez expérimenter cela à trouver la meilleure gamme d’utiliser (n’oubliez pas, vous pouvez utiliser le moniteur de série de la leçon précédente pour trouver la valeur brute de la photorésistance).
Cartographie de la gamme d’éclairement à l’aide d’une faible valeur qui est supérieure à une valeur que vous pourriez être saisie pourrait entraîner un nombre négatif (par exemple dans mon exemple, l’éclairement pourrait être 340 même si j’ai identifié l’extrémité inférieure de la plage à 350). Pour se protéger contre le réglage de luminosité à un nombre négatif, vous pouvez utiliser la fonction constrain().
La fonction constrain() prend trois arguments d’entrée - la valeur, une valeur faible et une valeur élevée.
int val = constrain(value, lowValue, highValue);
Si la valeur est comprise entre le cours et la haute valeur, alors la valeur est renvoyée. Si la valeur est inférieure les assouplir, puis exportées seront retourné. Si la valeur est supérieure à haute valeur, puis haute valeur sera retourné.
En utilisant la fonction constrain(), vous pouvez vous assurer vous ne régler la luminosité à une valeur incorrecte. Maintenant que vous avez une bonne luminosité, vous pouvez utiliser la fonction analogWrite() pour définir le PWM pour la goupille de LED. Une valeur de luminosité de 0 est un cycle de fonctionnement de 0 % (hors service) et une valeur de luminosité de 127 est un cycle d’utilisation de 50 %, etc..
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); }