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.

Quer aprender a usar isso em projetos reais, do zero?

Conhecer o Curso Maker