Paso 3: Escribir el código
Utilizando el IDE de Arduino crear un dibujo nuevo.
Antes de la función setup(), declarar las variables para el pin analógico conectado a la fotorresistencia y el pin digital conectado al LED.
//Photoresistor Pinint analogPin = 0; // LED Pin int ledPin = 9;
Para este firmware no necesitas poner nada en el método de instalación. Normalmente declararía el pin digital como salida utilizando la función pinMode(), sin embargo, vamos a utilizar la función analogWrite(), que no requiere el pin al ser declarados como salida.
En la función loop() comenzará por la lectura en el nivel de iluminación de la fotorresistencia utilizando el mismo código de la última lección.
void loop() { // put your main code here, to run repeatedly: // read the raw data coming in on analog pin 0: int lightLevel = analogRead(analogPin); }
A continuación se convertirá el nivel de luz entrante en el rango correcto para el LED. Para ello utilizará dos nuevas funciones - map() y constrain().
La función de mapa tiene cinco argumentos de entrada - el valor, un valor bajo y un valor alto de la gama actual y un valor bajo y un alto valor para el rango objetivo.
int val = map(value, fromLow, fromHigh, toLow, toHigh);
Todo ello no es volver a asignar un valor de un rango en el valor equivalente en otra gama. Por ejemplo, el mapa (25, 0, 50, 0, 100) devolvería 50 (50 es el equivalente en el 0-100 hasta 25 dentro de la gama de 0-50). En esta lección usted trazará un mapa de la lightLevel (un 0-1023 gama) a una gama PWM (0-255). Otra forma de accompishing el mismo objetivo en este caso sería dividir el valor de lightLevel por 4 (0-255 es el cuarto de 0-1023), pero si hizo eso, no puedes aprender la función map(). Además, porque no desea que su luz nocturna que en cuando hay alguna luz (por ejemplo, poca luz) tienes que modificar la gama de lightLevel. Por ejemplo, en mi oficina el valor de lightLevel es alrededor de 340 cuando las luces estén encendidas (no una oficina muy luminosa). Me gustaría tratar esto como si hay suficiente luz que el LED no debe ser iluminado, por lo que no estoy quemando el LED cuando las luces estén encendidas. Para ello, mapa de la gama de lightLevel como 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); }
Usted tendrá que experimentar con esto para encontrar la mejor gama para utilizar (Recuerde, usted puede utilizar el monitor serial de la lección anterior para buscar el valor bruto de la fotorresistencia).
Mapeo de la gama de lightLevel con un valor bajo que es mayor que un valor que podría introducir podría resultar en un número negativo (por ejemplo, en mi ejemplo, la lightLevel podría ser 340 aunque identifiqué el extremo inferior de la gama en 350). Para protegerse contra el ajuste de brillo a un número negativo se puede utilizar la función constrain().
La función de constrain() toma tres argumentos de entrada - el valor, un valor bajo y un alto valor.
int val = constrain(value, lowValue, highValue);
Si el valor está entre los trámites y el alto valor, se devolverá el valor. Si el valor es menor se devolverán los trámites, luego trámites. Si valor es mayor que el alto valor, alto valor se devolverá.
Utilizando la función constrain() puede asegurarle no ajustar brillo a un valor incorrecto. Ahora que tiene un valor de buen brillo, puede utilizar la función analogWrite() para configurar el PWM por la patilla del LED. Un valor de brillo de 0 es un ciclo de trabajo de 0% (apagado) y un valor de brillo de la 127 es un 50% ciclo de trabajo, 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); }