pwm-respiration.ino
El core del R4 expone analogWriteFrequency() (como el Due): el PWM del LED se fija a 20 kHz para eliminar el parpadeo visible en vídeo. La curva gamma hace la respiración natural al ojo.
Hardware
Un Arduino UNO R4 Minima (Renesas RA4M1, Cortex-M4 @ 14 MHz, 5 V, DAC de 12 bits, sin radio) alimentado por USB o 6-24 V. 1 LED + resistencia de 330 Ω.
Cableado
Ánodo a D9 mediante 330 Ω, cátodo a GND. La mayoría de pines digitales del R4 son PWM.
Funcionamiento
analogWriteFrequency reconfigura el temporizador, analogWrite aplica el ciclo de trabajo de 8 bits; el bucle sube en triángulo con potencia 2,2.
Ejecución
Arduino IDE 2.x (con el core « Arduino UNO R4 Boards » instalado), elige « Arduino UNO R4 Minima », selecciona el puerto y Subir. El monitor serie está a 9600.
Variantes
Gobernar la consigna por el DAC o una orden serie, o ampliar a tres LED (degradado RGB) con tres pines PWM.
pwm-respiration.ino
// Respiration LED sur D9 (PWM) avec gamma et frequence reglables.
const int LED = 9;
float niveau = 0, pas = 0.02;
unsigned long t0 = 0;
void setup() {
pinMode(LED, OUTPUT);
analogWriteFrequency(LED, 20000); // 20 kHz : inaudible et LED-friendly
analogWriteResolution(8); // consignes 0..255
Serial.begin(9600);
}
void loop() {
if (millis() - t0 < 10) return;
t0 = millis();
niveau += pas;
if (niveau >= 1.0f) { niveau = 1.0f; pas = -pas; }
if (niveau <= 0.0f) { niveau = 0.0f; pas = -pas; }
// Gamma 2.2 pour une perception lineaire a l'oeil.
float gamma = powf(niveau, 2.2f);
analogWrite(LED, (int)(gamma * 255));
}