analogWrite()

[Entradas e Saídas Analógicas]

Descrição

Aciona uma onda PWM (descrição (Em Ingês)) em um pino. Pode ser usada para variar o brilho de um LED ou acionar um motor a diversas velocidades. Após a função analogWrite() ser chamada, no pino haverá uma onda quadrada com o duty cycle (ciclo de trabalho) especificado até a próxima chamada de analogWrite() (ou uma chamada de digitalRead() ou digitalWrite() no mesmo pino). A frequência do sinal PWM na maioria dos pinos é aproximadamente 490 Hz. No Uno e placas similares, pinos 5 e 6 usam uma frequência de aproximadamente 980 Hz.

Na maioria das placas Arduino (as placas com o ATmega168 ou ATmega328), essa função funciona nos pinos 3, 5, 6, 9, 10, e 11. No Arduino Mega, essa funciona nos pinos 2 a 13 e 44 a 46. Placas mais antigas com o ATmega8 suportam analogWrite() apenas nos pinos 9, 10, and 11.
O Arduino DUE suporta analogWrite() nos pinos 2 a 13, mais pinos DAC0 e DAC1. Diferente dos pinos PWM, DAC0 e DAC1 são conversores Digital-Analógicos, e saídas analógicas legítimas.
Você não precisa chamar pinMode() para configurar um pino como saída antes de chamar analogWrite().
A função analogWrite() nada tem a ver com os pinos analógicos ou a função analogRead().

Sintaxe

analogWrite(pino, valor)

Parâmetros

pino: o pino escolhido. Tipos de dados permitidos: int.
valor: o duty cycle: entre 0 (sempre desligado) and 255 (sempre ligado). Tipos de dados permitidos: int

Retorna

Nada

Código de Exemplo

Controla a saída para um LED proporcionalmente a um valor lido de um potenciômetro.

int ledPin = 9;     // LED conectado ao pino digital 9
int analogPin = 3;  // potenciômetro conectado ao pino analógico 3
int val = 0;        // variável para guradar o valor lido

void setup() {
  pinMode(ledPin, OUTPUT);  // configura  o pino como saída
}

void loop() {
  val = analogRead(analogPin);  // lê o pino de entrada analógica
  analogWrite(ledPin, val / 4); // analogRead retorna valores de 0 a 1023, analogWrite recebe de 0 a 255
}

Notas e Advertências

As ondas PWM generadas nos pinos 5 e 6 terão duty cycles maiores que o esperado. Isso acontece porque ocorrem interações com as funções millis() e delay(), as quais compartilham o mesmo timer (temporizador) interno usado para gerar essas saídas PWM. Isso será constatado principalmente em duty-cycle baixos (ex. 0 - 10) e podem resultar em um valor de 0 não desligando completamente a saída nos pinos 5 e 6.

Ver Também

  • DEFINIÇÃO PWM