En cours Faire clignoter une led en dehors du programme principal

  • Auteur de la discussion gaston83
  • Date de début
T
tronix
Compagnon
6 Mar 2012
1 428
Toulouse
Bien sûr que je dramatise un peu ! Mais pas tant que ça. Il m'est arrivé, pour essayer de gagner du temps, de récupérer des librairies Arduino pour tester des composants. En particulier un lecteur RFID. Eh bien, cela n'a pas été si simple car delay() était utilisé à plusieurs endroits de la fonction de lecture (donc régulière), donc complétement incompatible avec d'autres fonction un peu "temps réel". Ajouter une machine d'état pour avoir une fonction non bloquante a pris un peu de temps, sur une fonction mal écrite à la base.
Donc, bien sûr, c'est utilisable, mais c'est une très mauvaise habitude. Et un jour, cela coince.
Le post #22 donne la solution que je préfère. Simple, efficace, utilisable du plus simple au plus complexe.
 
CNCSERV
CNCSERV
Compagnon
27 Déc 2007
5 667
FR-28360
Le post #22 donne la solution que je préfère. Simple, efficace, utilisable du plus simple au plus complexe.
Oui mais beaucoup plus gourmand que le code #14 avec 4 variables, des calculs ....
 
  • Réagir
Reactions: zed
T
tronix
Compagnon
6 Mar 2012
1 428
Toulouse
Pour finir, une fonction écrite avec delay() fonctionnera. Une deuxième aussi. Mais dès que l'on essaiera de les mettre ensemble, on risque fort qu'aucune des deux ne fonctionne plus, ou de façon erratique. C'est donc du code non réutilisable.
 
T
tronix
Compagnon
6 Mar 2012
1 428
Toulouse
Oui mais beaucoup plus gourmand que le code #14 avec 4 variables, des calculs ....
Peut-être, mais c'est nettement moins grave selon moi. Si on veut gérer 5 leds à des fréquences différentes, et des tas d'autres fontions plus ou moins cycliques, on va vite être coincé par le nombre des timers disponibles et le fait que ce ne soit pas forcément aussi régulier.
C'est de toute façon à celui qui programme de faire les choix en connaissance de cause.
 
Dernière édition:
  • Réagir
Reactions: zed
CNCSERV
CNCSERV
Compagnon
27 Déc 2007
5 667
FR-28360
Peut-être, mais c'est nettement moins grave selon moi.
Non car une interruption c'est un peu faire du multithread, pendant que l'interruption gère ta Led tu peux faire ce que tu veux dans Loop.
C'est un peu comme si pour un programme PC, tu voulais tout faire avec le thread principal.
Si on veut gérer 5 leds à des fréquences différentes, et des tas d'autres fonctions plus ou moins cycliques, on va vite être coincé par le nombre des timers disponible
Pourquoi tu veux faire un timer par Led ? il suffit d'avoir un compteur par Led.
Il y a encore plus élégant, c'est d'utiliser des tableau avec le cycle allumage de la led :

7 lignes pour gérer 6 leds.
En remplacant l'affreux DigitalWrite par une écriture de registre on pourrait encore reduire le nombre de cycles.
( Code juste pour l'exemple, non testé)

 
Dernière édition:
Haut