Salida PWM
Un pin digital solo da dos estados: encendido o apagado. PWM permite valores intermedios encendiendo y apagando el pin muy rápido; la proporción de tiempo encendido (el ciclo de trabajo) determina el efecto: brillo de un LED, velocidad de un motor DC, volumen de un zumbador.
analogWrite(pin, valor)
Sección titulada «analogWrite(pin, valor)»board.pinMode(9, board.MODES.PWM);board.analogWrite(9, 128); // ciclo de trabajo ~50 %El valor va de 0 a 255:
| Valor | Ciclo de trabajo | Efecto |
|---|---|---|
0 | 0 % (siempre apagado) | apagado / parado |
64 | ~25 % | tenue / lento |
128 | ~50 % | medio |
192 | ~75 % | brillante / rápido |
255 | 100 % (siempre encendido) | máximo |
board.pwmWrite(pin, valor) hace exactamente lo mismo que analogWrite; usa el que
prefieras.
Qué pines lo soportan
Sección titulada «Qué pines lo soportan»Solo los pines con hardware PWM. En placas Arduino clásicas son los marcados con ~
(por ejemplo 3, 5, 6, 9, 10, 11). En un pin sin PWM, analogWrite no atenúa: se
comporta como encendido/apagado.
Ejemplos
Sección titulada «Ejemplos»Brillo fijo de un LED:
board.pinMode(9, board.MODES.PWM);board.analogWrite(9, 200); // bastante brillanteEfecto “respiración” (sube y baja en bucle):
let nivel = 0, paso = 5;setInterval(() => { board.analogWrite(9, nivel); nivel += paso; if (nivel >= 255 || nivel <= 0) paso = -paso; // rebota en los extremos}, 30);Velocidad de un motor DC según una gVar (0–100 %) escrita desde un artefacto:
board.pinMode(5, board.MODES.PWM);setInterval(() => { const pct = Math.max(0, Math.min(100, varG.velocidad || 0)); board.analogWrite(5, Math.round((pct / 100) * 255));}, 100);Cuándo NO usar PWM
Sección titulada «Cuándo NO usar PWM»- Para un servo usa Servo, no PWM crudo.
- PWM no es un voltaje analógico real (es un promedio de pulsos); para eso haría falta un DAC.
Con frvn componentes,
new five.Led(9).brightness(128) usa PWM por debajo.