Auteur Sujet: Allumer et éteindre des LEDs  (Lu 419 fois)

Minimir09

  • Jr. Member
  • **
  • Messages: 53
    • Voir le profil
Allumer et éteindre des LEDs
« le: octobre 02, 2020, 02:46:44 pm »
Bonjour à toutes et tous,

dans un petit bout de code de type chenillard, je trouve un peu "sec" l'allumage et l'extinction des LEDs.
Peur-on intervenir sur la puissance de l'éclairage dans le code, comme si on agissait avec un rhéostat !
Cordialement, Minimir09  ;)
int timer = 100 ;
int intPin0 ;
int intPin1 ;
int intPin2 ;

void setup() {
  for (intPin0 = 4; intPin0 <= 13; intPin0++) {
    pinMode(intPin0, OUTPUT) ;
  }
}
void loop() {
  for (intPin0 = 4; intPin0 <= 13; intPin0++) {
    digitalWrite(intPin0, HIGH) ;  // allumage LED n°1
    delay(timer) ;
    digitalWrite(intPin1, LOW) ;   // extinction LED n° 2
    delay(timer) ;
    intPin1 = intPin0 + 1 ;        // sélection LED n°2
    digitalWrite(intPin1, HIGH) ;  // allumage LED n°2
    delay(timer) ;
    intPin2 = intPin0 + 2 ;        // sélection LED n°3
    digitalWrite(intPin2, HIGH) ;  // allumage LED n°3
    digitalWrite(intPin0, LOW) ;   // extinction LED n°1
  }
}
La perfection n’existe pas sur Terre … Mais alors, d’où est-ce que je viens ?

msport

  • Hero Member
  • *****
  • Messages: 1079
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Allumer et éteindre des LEDs
« Réponse #1 le: octobre 02, 2020, 03:01:03 pm »
Bonjour,
vous lirez avec profit l'article " La PWM : Qu’est-ce que c’est ? (1) "
Il répond exactement à votre question.
https://www.locoduino.org/spip.php?article47
Cordialement

chris_bzg

  • Global Moderator
  • Full Member
  • *****
  • Messages: 130
    • Voir le profil
Re : Allumer et éteindre des LEDs
« Réponse #2 le: octobre 02, 2020, 03:08:33 pm »
Bonjour Minimir09,

La solution pourrait être de choisir des broches capables de faire de la PWM, et d'utiliser analogWrite. Ainsi, vous pourrez ajuster la valeur de luminosité des LED, ce qui peut être intéressant surtout si vos LED sont de couleurs différentes. Je vous laisse trouver comment adapter votre code...

Evitez d'utiliser des noms de variables qui ressemblent à des éléments du microcontrôleur (comme votre variable timer qui peut prêter à confusion) ; dans le pire des cas, cela pourrait d'ailleurs faire planter le programme (par exemple si vous donnez un nom de variable identique à un nom de fonction : imaginez que vous ayez nommé votre variable int delay !).
La bonne pratique est d'utiliser un nom spécifique, par exemple :
int delaiAllumage = 100;  // en millisecondes
D'ailleurs, je vous conseille la lecture de cette page qui donne des bonnes pratiques :
https://www.arduino.cc/en/Reference/StyleGuide
« Modifié: octobre 02, 2020, 03:11:54 pm par chris_bzg »

Minimir09

  • Jr. Member
  • **
  • Messages: 53
    • Voir le profil
Re : Allumer et éteindre des LEDs
« Réponse #3 le: octobre 02, 2020, 03:22:23 pm »
Merci à vous tous ! surtout pour la confusion qu'il peut y avoir sur certain terme, j'en prends bonne note !
La perfection n’existe pas sur Terre … Mais alors, d’où est-ce que je viens ?

Minimir09

  • Jr. Member
  • **
  • Messages: 53
    • Voir le profil
Re : Re : Allumer et éteindre des LEDs
« Réponse #4 le: octobre 02, 2020, 04:55:53 pm »
Citation de: Minimir09
https://www.locoduino.org/spip.php?article47


J'ai 10 LEDs , et sur la UNO, il n'y a pas assez de broches PWM.
Quelle serai la solution ? Existe-t-il une possibilité de passer les broches 4 à 13 en PWM au moyen du code ?
La perfection n’existe pas sur Terre … Mais alors, d’où est-ce que je viens ?

msport

  • Hero Member
  • *****
  • Messages: 1079
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Allumer et éteindre des LEDs
« Réponse #5 le: octobre 02, 2020, 05:58:04 pm »
Il se peut que les broches analogiques puissent être utilisées en sorties PWM :

Can Arduino analog pins be used as PWM?
The Arduino does not have a digital-to-analog converter (DAC) built-in, but it can do pulse-width modulation (PWM) a digital signal used to achieve some of an analog output's functions. The function analogWrite(pin, value) is used to output a PWM signal.

Mais cela semble réservé à certains modèles, à tester pour le UNO.
https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/

Il est peut-être temps d'investir dans un Mega ...

Sinon on peut essayer d'allumer et d'éteindre les LED avec des "delay" ou des "millis" variables mais courts.
La persistance rétinienne est de 1⁄ 25 de seconde
Cordialement

Minimir09

  • Jr. Member
  • **
  • Messages: 53
    • Voir le profil
Re : Allumer et éteindre des LEDs
« Réponse #6 le: octobre 02, 2020, 06:30:00 pm »
"Can Arduino analog pins be used as PWM?
The Arduino does not have a digital-to-analog converter (DAC) built-in, but it can do pulse-width modulation (PWM) a digital signal used to achieve some of an analog output's functions. The function analogWrite(pin, value) is used to output a PWM signal."
========================================
The function analogWrite(pin, value) is used to output a PWM signal." Est-ce que ça veut dire qu'on utiliser les broches 4 à 13 en tant que PWM ?
La perfection n’existe pas sur Terre … Mais alors, d’où est-ce que je viens ?

msport

  • Hero Member
  • *****
  • Messages: 1079
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Allumer et éteindre des LEDs
« Réponse #7 le: octobre 02, 2020, 08:24:14 pm »
Non, ça voudrait dire que les broches A0 à A5 (analog pins) pourraient être utilisées en sorties PWM mais cela semble réservé à certains modèles, donc à tester pour le UNO.
Cordialement

chris_bzg

  • Global Moderator
  • Full Member
  • *****
  • Messages: 130
    • Voir le profil
Re : Allumer et éteindre des LEDs
« Réponse #8 le: octobre 04, 2020, 09:52:24 am »
La génération de la PWM provient des timers (voir article Les Timers IV).
Pour une carte UNO, le microcontrôleur possède trois timers et chaque timer a deux canaux possibles de PWM.
Cela fait donc 6 possibilités de PWM ce qui se traduit par 6 broches, et pas n'importe lesquelles, celles qui sont effectivement reliées aux canaux des timers.

On est confronté ici aux possibilités physiques du microcontrôleur de nos cartes. C'est pareil dans le monde réel : si on veut faire 0 à 100 km/h en moins de 6 secondes, il ne faut pas acheter une Clio !  ;)

Ceci étant dit, les possibilités du microcontrôleur ATmega328 de la carte UNO sont déjà bien suffisantes pour la plupart de nos montages. Si elles se révèlent insuffisantes, alors oui il faut acheter une autre carte comme la Mega2560 qui propose 15 broches PWM.