Diferencia entre revisiones de «analogWrite()»
(→Parámetros) |
(→Advertencias) |
||
Línea 21: | Línea 21: | ||
== Advertencias == | == Advertencias == | ||
− | * En la mayoría de las placas Arduino (con uC 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 | + | * En la mayoría de las placas Arduino (con uC ATmega168 o ATmega328), esta función se puede utilizar en los pines 3, 5, 6, 9, 10, y 11. |
− | * En el Arduino | + | * En el Arduino [[MEGA]], funciona en los pines 2 a 13 y 44 a 46. |
+ | * Las placas Arduino más antiguas con uC ATmega8 sólo admiten analogWrite() en los pines 9, 10 y 11. | ||
+ | * En el Arduino [[DUO]] 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. | ||
* 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 usado para generar las 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. | * 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 usado para generar las 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. | ||
Revisión del 00:10 27 jun 2018
Contenido
Descripción
Escribe un valor en un pin analógico (genera onda PWM). Se puede usar para encender un LED con luminosidad variable o accionar un motor que soporte PWM 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.
Nota: La función analogWrite() no tiene nada que ver con los pines analógicos o la función analogRead().
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.
Nota: No es necesario llamar a pinMode() para configurar el pin como salida antes de llamar analogWrite().
Sintaxis
analogWrite(pin, PWM);
Parámetros
- pin
- pin a usar. En Arduino UNO son: 3, 5, 6, 9, 10 y 11.
- PWM
- ciclo de trabajo: entre 0 (siempre apagado) y 255 (siempre encendido).
Retornos
Nada.
Advertencias
- En la mayoría de las placas Arduino (con uC 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 uC ATmega8 sólo admiten analogWrite() en los pines 9, 10 y 11.
- En el Arduino DUO 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.
- 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 usado para generar las 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.
Ejemplo
const byte led = 9; //LED PWM
const byte pot = A3; //potenciómetro
void setup() {
pinMode(led, OUTPUT);
pinMode(pot, INPUT); //En realidad no es necesario
}
void loop() {
int val = analogRead(pot); //lee el pin de entrada (genera valores enteros entre 0~1023)
analogWrite(led, val/4); //PWM, soporta valores enteros entre 0~255
}