Skip to content

Faire clignoter 3 LEDs à des fréquences différentes avec 1 Timer

Ce que l'on va faire ici

Dans ce programme Micropython, nous allons faire clignoter 3 LEDs à des vitesses différentes... mais avec un seul timer !

Info

Le truc ici va consister à compter les passages dans la boucle loop() et à réaliser une division modulo % avec des facteurs différents.

Matériel

  • une carte Pi Pico flashée avec MicroPython et préparée pour utilisation en vertical sur plaque d'essai

  • 1 module "prêt à câbler" à 3 LEDs Rouge, Jaune, Vert

  • +/- une petite plaque d'essai (pas indispensable ici)

  • quelques jumpers

Le schéma théorique

On connecte logiquement 4 broches :

  • celle commune à l'ensemble des LEDs est le - (cathode commune) à connecter à GND (=0V)
  • et une pour chaque LED de couleur à connecter à une broche de la carte en sortie.

Le montage à réaliser

On utilise ici la carte Pi Pico en vertical sur la plaque d'essai.

Ici, on connecte :

  • la LED verte sur la broche 18
  • la LED jaune sur la broche 19
  • la LED rouge sur la broche 20

Le 0V du module est connecté à la broche GND de la carte adjacente à la broche 18.

Info

En utilisant un câble 4 brins, le montage est très propre.

Le code

  • les broches utilisées sont mises en sortie sous forme d'un list
  • un timer appelle la fonction loop() à intervalle régulier
  • une variable sert à compter les passages dans loop() appelée par timer
  • à chaque passage, on réalise des tests basés sur des divisions avec des modulos différents pour chaque LED, ce qui a pour effet d'allumer les LEDs à des fréquences différentes, fraction de la fréquence principale.
# code Micropython - www.micropython.fr - CC BY SA
from machine import Pin, Timer # importe les classes Pin et Timer

leds=[Pin(18,Pin.OUT), Pin(19,Pin.OUT), Pin(20,Pin.OUT)]
vert, jaune, rouge=0,1,2 # index des LEDs

timer=Timer() # création objet timer

compt=0

def loop(timer): # fonction de clignotement

        global compt
        compt=compt+1

        # clignotement led rouge à f/2
        if compt%2==0 : leds[rouge].on() 
        else: leds[rouge].off()

        # clignotement led rouge à f/3
        if compt%3==0 : leds[jaune].on() 
        else: leds[jaune].off()

        # clignotement led rouge à f/5
        if compt%5==0 : leds[vert].on() 
        else: leds[vert].off()

# rappel fonction loop à fréquence voulue
timer.init(freq=10, callback=loop) 

Résultat

Les 3 LEDs clignotent simultanément.

Info

N'hésitez pas à modifier la valeur de la fréquence de clignotement.