analogWrite()

Descripción

Escribe un valor en un pin analógico (onda PWM). Se puede utilizar para encender un LED con luminosidad variable o accionar un motor a diferentes velocidades. Después de llamar a analogWrite(), el pin va a generar una onda cuadrada constante del ciclo de trabajo especificado hasta la siguiente llamada a analogWrite() (o una llamada a digitalRead() o digitalWrite() en el mismo pin). La frecuencia de la señal PWM en la mayoría de los pines es de aproximadamente 490 Hz. En las placas Uno y similares, los pines 5 y 6 tienen una frecuencia de aproximadamente 980 Hz. Los pines 3 y 11 en el Leonardo también se ejecutan a 980 Hz.

En la mayoría de las placas Arduino (aquellos con los ATmega168 o ATmega328), esta función se puede utilizar en los pines 3, 5, 6, 9, 10, y 11. En el Arduino Mega, funciona en los pines 2 a 13 y 44 a 46. Las placas Arduino más antiguas con un ATmega8 sólo admiten analogWrite() en los pines 9, 10 y 11.

En el Arduino Due analogWrite() funciona en los pines 2 a 13, más en los pines DAC0 y DAC1. A diferencia de los pines PWM, DAC0 y DAC1 son convertidores Digitales a Analógicos, y actúan como verdaderas salidas analógicas.

No es necesario llamar a pinMode() para configurar el pin como salida antes de llamar analogWrite().

La función analogWrite() no tiene nada que ver con los pines analógicos o la función analogRead().

Sintaxis

analogWrite(pin, value)

Parámetros

  • pin: el pin a escribir.
  • value: el ciclo de trabajo: entre 0 (siemprea apagado) y255 (siempre encendido).

Retornos

  • Ninguno

Ejemplo

Establece la salida de un LED para que sea proporcional al valor leido de un potenciómetro.

Hardware Required

1×Arduino UNO or Genuino UNO
1×Potentiometer
1×(Alternative) Potentiometer Kit
1×(Alternative) Potentiometer Module with Knob
1×LED
1×220 ohm resistor
1×Breadboard
1×Jumper Wires
1×(Recommended) Screw Terminal Block Shield for Arduino Uno
1×(Recommended) Breadboard Shield For Arduino Uno
1×(Recommended) Enclosure For Arduino Uno
Disclosure: Some links in this section are Amazon affiliate links. If you make a purchase through these links, we may earn a commission at no extra cost to you.
Additionally, some links direct to products from our own brand, DIYables.

Wiring Diagram

Arduino Rotary Potentiometer LED Wiring Diagram

This image is created using Fritzing. Click to enlarge image

Arduino Code

int ledPin = 3; // LED conectado al pin 3 int analogPin = A0; // potenciómetro conectado al pin analógico A0 int val = 0; // variable para almacenar el valor leido void setup() { pinMode(ledPin, OUTPUT); // configura el pin como salida} } void loop() { val = analogRead(analogPin); // lee el pin de entrada analogWrite(ledPin, val / 4); // analogRead valores desde 0 a1023, analogWrite valores desde 0 a 255 }

For more detailed instruction, see Arduino - Potentiometer fade LED

※ Nota:

  • Las salidas PWM generadas en los pines 5 y 6 tendrán ciclos de trabajo más altos de lo esperado. Esto es debido a las interacciones con las funciones millis() y delay(), que comparten el mismo temporizador interno utilizado para generar dichas salidas PWM. Esto se notará sobre todo en entornos de pequeño ciclo de trabajo (por ejemplo 0 - 10) y puede dar lugar a que un valor de 0 apague completamente la salida en los pines 5 y 6.
  • The analogRead() and analogWrite() functions do NOT read and write the same thing. analogRead() function reads the analog value which is converted from the voltage. analogWrite() function writes PWM signal. If you use the analogWrite() function first, and then use analogRead() function to read the value on the same pin, the read value is diferent from the wrote value. In other word, analogRead() function uses ADC (Analog to Digital) converter, but analogWrite() function does NOT use DAC (Digital to Analog) converter.
  • The analog input pins can be used as digital pins, referred to as A0, A1, etc. The exception is the Arduino Nano, Pro Mini, and Mini's A6 and A7 pins, which can only be used as analog inputs.
void setup() { pinMode(A5, OUTPUT); // sets the pin as output } void loop() { for(int i = 0; i < 255; i++) { analogWrite(A5, i); delay(50); } }

ARDUINO BUY RECOMMENDATION

Arduino UNO R3
Arduino Starter Kit

※ OUR MESSAGES