/*
* Projet : LED Fade (variation de luminosité)
* Principe : PWM via analogWrite() + temporisation non bloquante
* Câblage : LED + résistance 220 Ohm sur broche 9 (PWM)
*/
const int PIN_LED = 9; // Déclare la broche 9 comme sortie PWM pour la LED
const int PAS = 5; // Valeur d’incrément de luminosité (variation par pas de 5 sur 0–255)
const long INTERVALLE = 100; // Intervalle de temps entre chaque variation (5 ms)
int luminosite = 0; // Stocke la valeur PWM actuelle (luminosité de la LED)
int direction = 1; // Indique le sens de variation : +1 = augmente, -1 = diminue
unsigned long dernierTemps = 0; // Mémorise le dernier instant où la LED a été mise à jour
void setup() {
pinMode(PIN_LED, OUTPUT); // Configure la broche de la LED comme sortie
Serial.begin(9600); // Initialise la communication série à 9600 bauds
}
void loop() {
unsigned long maintenant = millis(); // Lit le temps écoulé depuis le démarrage (en ms)
// Vérifie si l’intervalle est écoulé
if (maintenant - dernierTemps >= INTERVALLE) {
dernierTemps = maintenant; // Met à jour le temps de référence
// Applique la luminosité courante à la LED via PWM
analogWrite(PIN_LED, luminosite);
// Fait progresser la luminosité selon la direction (+1 ou -1)
luminosite += direction * PAS;
// Vérifie les limites et inverse la direction si nécessaire
if (luminosite >= 255) { // Si la LED est au maximum
luminosite = 255; // Bloque à 255
direction = -1; // Change la direction pour descendre
} else if (luminosite <= 0) { // Si la LED est au minimum
luminosite = 0; // Bloque à 0
direction = +1; // Change la direction pour monter
}
// Affiche les valeurs sur le moniteur série pour contrôle
Serial.print("Luminosite: "); // Texte fixe
Serial.print(luminosite); // Valeur PWM actuelle
Serial.print(" / Rapport cyclique: "); // Texte fixe
Serial.print((luminosite * 100) / 255); // Conversion en pourcentage du duty cycle
Serial.println("%"); // Ajoute le symbole % et passe à la ligne
}
}