pwm-fade.ino
La LED montéesur une broche PWM (9) monte et descend en luminosité comme une respiration. analogWrite() génère un signal PWM 8 bits (0-255) dont le rapport cyclique pilote la brillance moyenne de la LED.
Matériel requis
Une Arduino Pro Mini (ATmega328P, existe en 5 V/16 MHz et 3,3 V/8 MHz) reliée à un convertisseur USB-série (FTDI) ou un programmeur ICSP. 1 LED + résistance 330 Ω.
Câblage
Anode de la LED vers la broche 9 via la résistance 330 Ω, cathode vers GND. La broche 9 est une sortie PWM sur les cartes AVR classiques.
Fonctionnement
analogWrite() configure un timer matériel qui hache le signal à environ 500 Hz. La valeur 0-255 fixe le rapport cyclique ; la boucle la fait varier en triangle entre 0 et 255.
Exécution
Choisissez « Arduino Pro Mini » dans l'IDE (5 V/16 MHz ou 3,3 V/8 MHz selon votre modèle), le processeur ATmega328P, le bon port, puis Téléverser. Le convertisseur doit être câblé DTR-DTR, RX-TX, TX-RX, VCC-VCC, GND-GND.
Variantes
Ajoutez un potentiomètre sur A0 pour piloter la luminosité avec analogRead() x, ou appliquez un gamma (valeur² / 255) pour une montée plus naturelle.
pwm-fade.ino
// Effet "respiration" : variation progressive de la LED par PWM.
const int LED = 9; // broche PWM (marquee ~ sur les cartes AVR)
int valeur = 0;
int pas = 4;
const int PAUSE = 15; // ms entre deux paliers
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
analogWrite(LED, valeur); // PWM 8 bits : 0..255
Serial.println(valeur);
valeur += pas;
if (valeur >= 255) { valeur = 255; pas = -pas; } // sommet : on redescend
if (valeur <= 0) { valeur = 0; pas = -pas; } // bas : on remonte
delay(PAUSE);
}
// Sur les AVR, analogWrite() pilote les timers 0, 1 et 2 :
// broches 5, 6, 9, 10, 11, 3 selon la carte. La perception de la
// luminosite est logarithmique : pour un rendu plus naturel,
// remplacer valeur par (valeur * valeur) / 255 (gamma 2).