pwm-respiration.ino
Le core du R4 expose analogWriteFrequency() (comme le Due) : le PWM de la LED se fixe à 20 kHz pour éliminer tout scintillement visible en vidéo. La courbe gamma rend la respiration naturelle à l'œil.
Matériel requis
Une Arduino UNO R4 WiFi (Renesas RA4M1 @ 14 MHz + ESP32-S3 Wi-Fi/BLE compagnon, matrice LED 12x8, LED RGB) alimentée par USB ou 6-24 V. 1 LED + résistance 330 Ω.
Câblage
Anode sur D9 via 330 Ω, cathode vers GND. La plupart des broches digitales du R4 sont PWM.
Fonctionnement
analogWriteFrequency reconfigure le timer matériel, analogWrite applique le rapport cyclique 8 bits ; la boucle rampe en triangle avec puissance 2,2.
Exécution
Arduino IDE 2.x avec le core « Arduino UNO R4 Boards », carte « Arduino UNO R4 WiFi », port série puis Téléverser. Le coprocesseur ESP32-S3 se met à jour séparément si l'IDE le demande.
Variantes
Piloter la consigne par le DAC ou une commande série, ou étendre à trois LED (dégradé RGB) avec trois broches 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));
}