analogWrite()
analogWrite(pino, valor)
Quer variar o brilho de um LED ou a velocidade de um motor em vez de só ligar/desligar? É pra isso que serve o analogWrite(). Ele não gera uma tensão analógica de verdade — ele usa PWM (modulação por largura de pulso), ligando e desligando o pino muito rápido pra simular uma tensão intermediária.
Sintaxe
analogWrite(pino, valor);
Parâmetros
- pino: um pino com suporte a PWM. No Uno são os marcados com
~: 3, 5, 6, 9, 10 e 11. - valor: o "quanto" ligado, de 0 (sempre desligado) a 255 (sempre ligado).
Retorno
Nada (void).
Exemplo
void setup() {
pinMode(9, OUTPUT);
}
void loop() {
for (int b = 0; b <= 255; b++) {
analogWrite(9, b);
delay(5);
}
}
Notas e cuidados
- Só funciona nos pinos PWM (
~); em outros pinos ele apenas liga (valor ≥ 128) ou desliga. - Não é tensão analógica real: é um sinal quadrado (~490 Hz na maioria dos pinos do Uno). Pra dimerizar LED e regular motor por um driver funciona muito bem.
- LED sempre com resistor em série (ex.: 220–330 Ω). Ligar o LED direto no pino queima o LED e força a saída do Arduino.
- Motor nunca vai direto no pino: a saída entrega só uns 20–40 mA e um motor puxa bem mais que isso. Use um transistor/MOSFET (ou um driver/ponte-H, tipo L298N) com alimentação externa e um diodo de roda-livre — o
analogWrite()controla o transistor, e o transistor aciona o motor. - No ESP32 a função existe (via
analogWrite/LEDC nas versões recentes do core), mas a resolução e os pinos são diferentes — confira o core que você usa.