LOCODUINO
Parlons Arduino => Trucs & astuces => Discussion démarrée par: Minimir09 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
}
}
-
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
-
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
-
Merci à vous tous ! surtout pour la confusion qu'il peut y avoir sur certain terme, j'en prends bonne note !
-
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 ?
-
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
-
"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 ?
-
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.
-
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.
-
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 ?
Je vous conseille de regarder ce type de produit : https://fr.aliexpress.com/item/4000468996665.html?spm=a2g0o.productlist.0.0.52d85f477siI2L&algo_pvid=008d2612-a4a0-478c-b3e8-63989ae8f569&algo_expid=008d2612-a4a0-478c-b3e8-63989ae8f569-0&btsid=2100bddd16189531074872889e58a9&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_
Pas cher et 16 PWM en extension de votre arduino préféré. ;)
-
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 ;)
J'avais pas vu passé.
La bibliothèque LightDimmer fait ce que vous voulez. Elle génère une PWM logicielle sur les broches qui n'ont pas de PWM matérielle. Les temps d'allumage et d'extinction sont réglables.
Elle est ici : https://github.com/Locoduino/LightDimmer
Et également disponible dans le gestionnaire de bibliothèques de l'IDE
-
il existe un tuto tout fait sur le sujet :
https://arduinogetstarted.com/tutorials/arduino-led-fade
-
Bonjour Jean-Luc,
La bibliothèque LightDimmer fait ce que vous voulez. Elle génère une PWM logicielle sur les broches qui n'ont pas de PWM matérielle. Les temps d'allumage et d'extinction sont réglables.
Cette librairie m'intéresse mais il me semble que LightDimmer ne fonctionne pas avec l'Arduino Nano. Vous confirmez ?
Merci,
-
Bonjour,
Sauf erreur de ma part, elle fonctionne avec tout type d'Arduino
Cordialement
-
En effet LightDimmer est utilisé par les Satellites V1 qui sont équipés d'un Nano.