Al igual que puedes leer señales analógicas, también puedes generar valores analógicos. Arduino utiliza Pins con Modulación Controlada por Pulsos, PWM (del inglés Pulse Width Modulation) para enviar los valores analógicos. Echa un vistazo a los Pins digitales que llevan al lado un símbolo de corriente (~).
Cuando se utiliza un Pin digital normal para escribir HIGH
o LOW
, se obtiene bien 5V o 0V. Estos Pins PWM tienen una habilidad diferente, puedes utilizarlos para obtener un nivel de tensión en cualquier punto entre 5V y 0V. Con esto, puedes atenuar un LED sin problemas entre ON y OFF.
Para utilizar esta habilidad especial de los Pins PWM, tendrás que usar la función analogWrite()
. Se necesitan dos parámetros, el número del Pin PWM, y el nivel de salida. El nivel de salida es un número entre 0 y 255. 0 es igual a digitalWrite(pin, LOW)
, 255 es igual a ejecutar digitalWrite(pin, HIGH)
y puedes llegar a cualquier punto entremedias.
analogRead
y analogWrite
: analogRead
tiene 1024 niveles de lectura, mientras que analogWrite
sólo tiene 256. analogRead
utiliza Pins analógicos, mientras que analogWrite
utiliza Pins digitales tipo PWM.Veamos un ejemplo. Coge un LED y una resistencia de 220 Ohmios (con líneas de color rojo, rojo, marrón). Conecta el Pin largo del LED a la resistencia y el otro Pin de la resistencia al pin digital 10. Conecta el brazo corto del LED a GND.
No es necesario llamar a la función interna pinMode
cuando utilizas analogWrite
. Así que puedes dejar la configuración vacía aquí.
Después de cargar el código de abajo, verás que el LED se va iluminando poco a poco hasta llegar a su máxima intensidad, y luego se repite.
int ledPin = 10; int fade = 0; void setup() { // nothing here } void loop() { analogWrite(ledPin, fade); delay(10); fade = fade + 10; if (fade > 255) fade = 0; }
Aquí se ha utilizado un nuevo comando:
analogWrite(pinNumber, fadeLevel)
: escribe una señal analógica a un Pin PWM.pinNumber
es el número de Pin PWM que estás utilizando,fadeLevel
es un número entre 0 y 255. 0 es igual a digitalLOW
, 255 es igual a digitalHIGH
.
¡Sigue experimentando!
- Intenta hacer que el LED se desvanezca a negro después de que alcance el brillo completo, en lugar de quedarse oscuro de repente. A esto lo llamamos una luz de respiración (breath).
- ¿Se puede cambiar la velocidad de la “respiración” para que se desvanezca más rápido o más lento?
- ¿Se puede utilizar un potenciómetro para controlar el LED? Recuerda la diferencia entre
analogRead()
yanalogWrite()
.