Modifications

Sauter à la navigation Sauter à la recherche
6 658 octets supprimés ,  20 février 2016 à 16:14
Contenu remplacé par « {{MicroPython-Hack-Prepare-NAV}} {{MicroPython-Hack-8LEDS-core}} {{MicroPython-Hack-MCH-TRAILER}} »
Ligne 1 : Ligne 1 :  
{{MicroPython-Hack-Prepare-NAV}}
 
{{MicroPython-Hack-Prepare-NAV}}
   −
{{traduction}}
+
{{MicroPython-Hack-8LEDS-core}}
   −
== Ce que nous faisons ==
+
{{MicroPython-Hack-MCH-TRAILER}}
{{bloc-etroit|text=Jusque là, nous avons fait clignoter une LED, il est maintenant temps d'augmenter les enjeux. Connectons donc huit LEDs. Nous allons aussi avoir l'opportunité de tirer le maximum de notre Pyboard en créant différentes séquences lumineuses.
  −
Ce circuit est aussi un bon point de départ pour commencer à faire vos expériences en écrivant vos propres programmes et pour essayer de comprendre comment fonctionne votre PyBoard.
  −
 
  −
En même temps que contrôler les LEDs, nous allons aussi nous intéresser à quelques méthodes de programmation rudimentaires permettant de garder des programmes petites tailles.
  −
La boucle {{fname|for}} est utilisée lorsque qu'il est nécessaire d'exécuter un morceau de code plusieurs fois.
  −
 
  −
Une liste {{fname|leds}} sera utilisée pour gérer les variables plus facilement (cette liste représentera une liste de variables).
  −
}}
  −
 
  −
== Matériel nécessaire ==
  −
{{bloc-etroit|text=
  −
 
  −
{{ARDX-composant-begin}}
  −
 
  −
{{ARDX-composant
  −
  |label=Fils
  −
  |label2=
  −
  |img=ARDX-fils.png
  −
  |pl=34
  −
}}
  −
 
  −
{{ARDX-composant
  −
  |label=Résistance de 1 KOhms (brun-noir-rouge)
  −
  |label2=x8
  −
  |img=ARDX-R1K.png
  −
  |pl=43
  −
}}
  −
 
  −
{{ARDX-composant
  −
  |label=LEDs (ou DELs)
  −
  |label2=x8
  −
  |img=ARDX-LED-verte.png
  −
  |pl=66
  −
}}
  −
 
  −
{{ARDX-composant-end}}
  −
}}
  −
 
  −
== Schéma ==
  −
 
  −
[[Fichier:Hack-8LEDs-schema.png]]
  −
 
  −
 
  −
== Montage ==
  −
[[Fichier:Hack-8LEDs-montage.png|640px]]
  −
 
  −
== Le code ==
  −
Voici le code permettant de tester votre montage.
  −
 
  −
Il s'agit d'une version {{underline|très simplifiée}} du programme de test
  −
<nowiki># créer les objets Pin configuré en sortie (OUT_PP)
  −
x1 = pyb.Pin( 'X1', pyb.Pin.OUT_PP )
  −
x2 = pyb.Pin( 'X2', pyb.Pin.OUT_PP )
  −
x3 = pyb.Pin( 'X3', pyb.Pin.OUT_PP )
  −
x4 = pyb.Pin( 'X4', pyb.Pin.OUT_PP )
  −
x5 = pyb.Pin( 'X5', pyb.Pin.OUT_PP )
  −
x6 = pyb.Pin( 'X6', pyb.Pin.OUT_PP )
  −
x7 = pyb.Pin( 'X7', pyb.Pin.OUT_PP )
  −
x8 = pyb.Pin( 'X8', pyb.Pin.OUT_PP )
  −
 
  −
# boucle infinie
  −
while True:
  −
  # allumer les LEDs en chenillard
  −
  x1.high()
  −
  pyb.delay(100)
  −
  x1.low()
  −
  pyb.delay(100)
  −
  x2.high()
  −
  pyb.delay(100)
  −
  x2.low()
  −
  pyb.delay(100)
  −
  x3.high()
  −
  pyb.delay(100)
  −
  x3.low()
  −
  pyb.delay(100)
  −
  x4.high()
  −
  pyb.delay(100)
  −
  x4.low()
  −
  pyb.delay(100)
  −
  x5.high()
  −
  pyb.delay(100)
  −
  x5.low()
  −
  pyb.delay(100)
  −
  x6.high()
  −
  pyb.delay(100)
  −
  x6.low()
  −
  pyb.delay(100)
  −
  x7.high()
  −
  pyb.delay(100)
  −
  x7.low()
  −
  pyb.delay(100)
  −
  x8.high()
  −
  pyb.delay(100)
  −
  x8.low()
  −
  pyb.delay(100)</nowiki>
  −
 
  −
Nous commençons par créer un objet {{fname|Pin}} par sortie et nous en gardons la référence dans une variable.
  −
 
  −
Ainsi, la broche nommée {{fname|'X1'}} pourra être manipulée avec l'objet {{fname|x1}}.
  −
 
  −
Nous verrons par la suite dans la section "faire encore mieux", que nous pouvons grandement améliorer ce code pour en faciliter la maintenance.
  −
 
  −
Pour l'instant, dans cette première version du programme, nous allons contrôler directement chacune des LEDs.
  −
 
  −
== Cela ne fonctionne pas? ==
  −
Voici 3 choses à essayer.
  −
=== Certaines LEDs ne s'allument pas? ===
  −
Il est facile d'insérer une LED dans le mauvais sens.
  −
Vérifiez les LEDs qui ne fonctionnent pas et assurez vous qu'elles sont connectées correctement.
  −
 
  −
=== La séquence affichée est incorrecte ? ===
  −
Avec 8 fils, il est facile d'en intervertir deux.
  −
 
  −
Vérifiez que la première LED est connectée sur la broche X1 (et que les raccordements se suivent correctement)
  −
 
  −
=== Tout recommencer ===
  −
Il est très facile de faire un mauvais raccordement sans s'en rendre compte.
  −
 
  −
Tout démonter et recommencer le montage à nouveau est souvent plus facile que d'essayer de trouver la cause du problème.
  −
 
  −
== Faire encore mieux ==
  −
=== Utiliser les boucles FOR ===
  −
Dans cette version du programme, nous allons:
  −
* Nous commençons par créer une liste {{fname|names}} qui contient les noms des broches utilisées sur notre PyBoard.
  −
* Nous créons ensuite une liste {{fname|pins}} vide pour l'instant.
  −
* Ensuite, nous utilisons une boucle {{fname|for}} pour créer des objets {{fname|Pin}}, un objet par broche. Ces objets {{fname|Pin}} sont ajoutés à la liste {{fname|pins}}.
  −
* Utiliser une autre boucle {{fname|for}} pour manipuler les objets {{fname|Pin}} stocké dans la liste {{fname|pins}}. Il sera plus facile de manipuler les les LEDs dans la boucle {{fname|while True}}
  −
 
  −
Ces optimisations vont singulièrement raccourcir le programme.
  −
 
  −
<nowiki># declaration des broches
  −
names = ['X1','X2', 'X3', 'X4', 'X5', 'X6', 'X7', 'X8' ]
  −
 
  −
# créer les objets Pin configuré en sortie (OUT_PP)
  −
pins = []
  −
for name in names:
  −
  pins.append( pyb.Pin( name, pyb.Pin.OUT_PP ) )
  −
 
  −
while True:
  −
  for pin in pins:
  −
    pin.high()
  −
    pyb.delay(100)
  −
    pin.low()
  −
    pyb.delay(100)</nowiki>
  −
 
  −
La deuxième boucle {{fname|for}} allume et éteint chacune des LEDs à tour de rôle.
  −
 
  −
=== Utiliser une Comprehension List ===
  −
La [http://domeu.blogspot.be/search?q=comprehension Comprehension List] est une structure/syntaxe super-puissante en Python. Un peu déroutante au début, c'est un allier d'une grande puissance.
  −
 
  −
Dans cette version du code, la création de la liste {{fname|pins}} est assuré par une compréhension list.... en une seule ligne de code.
  −
 
  −
<nowiki># declaration des broches
  −
names = ['X1','X2', 'X3', 'X4', 'X5', 'X6', 'X7', 'X8' ]
  −
 
  −
# créer les objets p en sortie
  −
pins = [ pyb.Pin( name, pyb.Pin.OUT_PP ) for name in names ]
  −
 
  −
while True:
  −
  for pin in pins:
  −
    pin.high()
  −
    pyb.delay(100)
  −
    pin.low()
  −
    pyb.delay(100)</nowiki>
  −
 
  −
=== D'autres animations ===
  −
Dans cette version du programme, nous avons prévu quelques autres animations.
  −
 
  −
Vous pouvez facilement les essayer (ou les combiner) en retirant/ajoutant le symbole de commentaire {{fname|#}} en début de ligne.
  −
 
  −
<nowiki># Delai d'animation
  −
DELAIS = 50
  −
 
  −
# declaration des broches
  −
names = ['X1','X2', 'X3', 'X4', 'X5', 'X6', 'X7', 'X8' ]
  −
 
  −
# creer les objets p en sortie
  −
pins = [ pyb.Pin( name, pyb.Pin.OUT_PP ) for name in names ]
  −
 
  −
# === Fonctions d'animation ===
  −
  −
""" allume chaque LED, une à la fois """
  −
def one_by_one( reverse=False ):
  −
  # en ordre inverse?
  −
  if reverse:
  −
    liste = reversed( pins )
  −
  else:
  −
    liste = pins
  −
 
  −
  for pin in liste:
  −
    pin.high()
  −
    pyb.delay(DELAIS)
  −
    pin.low()
  −
    pyb.delay(DELAIS)
  −
 
  −
""" Allume toutes les LEDs (une après l'autre) """
  −
def turn_all( on, reverse=False ):
  −
  # en order inverse?
  −
  if reverse:
  −
    liste = reversed( pins )
  −
  else:
  −
    liste = pins
  −
 
  −
  for pin in liste:
  −
    if on:
  −
      pin.high()
  −
    else:
  −
      pin.low()
  −
    pyb.delay(DELAIS)
  −
 
  −
 
  −
while True:
  −
  #one_by_one()
  −
  #one_by_one( reverse = True )
  −
  turn_all( on = True )
  −
  turn_all( on = False )
  −
  #turn_all( on = True, reverse = True )
  −
  #turn_all( on = False )
  −
</nowiki>
  −
{{MicroPython-Hack-Prepare-TRAILER}}
 
29 836

modifications

Menu de navigation