🛠 LED qui respire en PWM
Objectifs
Faire « respirer » une LED avec la modulation de largeur d'impulsion (PWM) : analogWrite de 0 à 255, rampe triangulaire, puis pilotage de la luminosité par le capteur de lumière. On identifie les pastilles PWM (5, 6, 9, 10, 11 sur Simple/SimpleSnap) et la limite de courant de 40 mA par pastille.
Matériel
- 1 LilyPad SimpleSnap + pile 3,7 V
- 1 LED LilyPad sur une pastille PWM (9 conseillée, PWM sur tous les modèles)
- 1 capteur de lumière LilyPad sur A2 (variante pilotée par la lumière)
- Adaptateur FTDI pour les tests série
Code complet
// LED « qui respire » sur pastille PWM 9 — analogWrite 0..255
const uint8_t LED = 9; // PWM sur toutes les LilyPad (5/6/9/10/11 sur Simple)
const uint8_t CAPTEUR = A2; // option : luminosité ambiante
bool modeCapteur = false; // true = luminosité imposée par le capteur
uint16_t niveau = 0;
int8_t pas = 4; // avance de 4/255 toutes les 10 ms
void setup {
pinMode(LED, OUTPUT);
}
void loop {
if (modeCapteur) {
int brut = analogRead(CAPTEUR); // 0..1023
analogWrite(LED, map(brut, 0, 1023, 0, 255));
} else {
if (niveau >= 255) pas = -4; // sommet : on redescend
if (niveau <= 0) pas = 4; // fond : on remonte
niveau += pas;
analogWrite(LED, niveau);
}
delay(10);
}
Vérification attendue
La LED monte en luminosité pendant environ 0,65 s, redescend, remonte, en boucle fluide : l'œil perçoit une respiration. En mode capteur, la LED s'éteint dans l'obscurité et s'allume à fond sous une lampe de poche. La LED ne clignote pas grossièrement : si elle reste seulement allumée/éteinte, la pastille choisie n'est pas une sortie PWM.
Erreurs fréquentes
- analogWrite sur une pastille non PWM : la LED clignote trop vite pour l'œil ou reste figée à mi-tension.
- Confondre 0–255 (PWM) et 0–1023 (ADC) : map est indispensable entre le capteur et la LED.
- Surcharger la pastille : 40 mA maximum par broche (documenté) ; pour plusieurs LED, les répartir sur plusieurs pastilles ou ajouter un transistor.
- Rampe avec un compteur uint8_t : niveau += pas déborde silencieusement à 255 ; utiliser uint16_t comme ici.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinopwm-respiration.inoArduinoluxmetre-couture.inoArduinointerrupteur-tilt.inoArduinoservo-balayage.inoArduino