Modifications

Sauter à la navigation Sauter à la recherche
2 457 octets ajoutés ,  10 janvier 2016 à 18:39
Ligne 195 : Ligne 195 :     
=== Afficher les couleurs aléatoirement ===
 
=== Afficher les couleurs aléatoirement ===
Choisissez l'une des couleurs disponibles dans le tableau {{fname|COLORS}}.
+
Nous allons modifier le programme pour qu'il sélectionne aléatoirement un couleur parmi celles que nous avons définie et active la LED en fonction de cette couleur aléatoire.
   −
{{traduction}}
+
Le programme ainsi modifier répétera l'opération une centaine de fois avec un délai de 1/4 seconde entre chaque changement.
Nous pouvons bien entendu faire plus qu'afficher constamment la même couleur.  
     −
Pour voir comment nous pouvons faire des cycles entre différentes couleurs aléatoires modifiez le code de la fonction {{fname|loop()}} vers :
+
{{underline|'''Quelques explications:'''}}
   −
  <nowiki>void loop(){
+
Nous allons commencer par créer une liste des couleurs disponibles que nous allons stocker dans la variable {{fname|COLORS}}.
  //setColor(ledDigitalOne, CYAN);
+
 
  randomColor()
+
  <nowiki>COLORS = [ rouge, vert, bleu, jaune, cyan, magenta ]</nowiki>
}</nowiki>
+
 
 +
Nous avons donc un tableau dont d'une taille de {{fname|len(COLORS)}}, soit 6 éléments.
 +
 
 +
Nous allons ensuite générer un nombre aléatoire avec {{fname|pyb.rng()}} qui génère une valeur entière sur 30  bits.
 +
 
 +
Nous allons prendre [http://www.france-ioi.org/algo/course.php?idChapter=650&idCourse=0&iOrder=22 le reste de la division entière] par 6 (la longueur du tableau) pour obtenir une valeur bornée entre 0 et 5... soit l'index d'une couleur dans le tableau {{fname|COLORS}}.
 +
 
 +
La sélection d'une couleur aléatoire peut se résumer dans les deux lignes suivantes:
 +
 
 +
<nowiki>couleur_index = pyb.rng() % len( COLORS )
 +
couleur = COLORS[couleur_index]</nowiki>
 +
 +
{{underline|'''Le programme modifié'''}}
 +
 
 +
<nowiki>RED_PIN = pyb.Pin.board.Y10    # Led rouge
 +
GREEN_PIN = pyb.Pin.board.Y11  # Led verte
 +
BLUE_PIN = pyb.Pin.board.Y12  # Led bleue
 +
 
 +
# Déclaration des broches
 +
pRed = pyb.Pin( RED_PIN, pyb.Pin.OUT_PP )
 +
pGreen = pyb.Pin( GREEN_PIN, pyb.Pin.OUT_PP )
 +
pBlue = pyb.Pin( BLUE_PIN, pyb.Pin.OUT_PP )
 +
 
 +
# Déclaration des 3 broches la LED RGB
 +
pRGB = (pRed,pGreen,pBlue)
 +
 
 +
# Assigne l'etat des broches rouge,vert,bleu à partir d'un tuple de
 +
# 3 éléments tels que  (True,True,True)
 +
def set_led( p_rgb, state_tuple ):
 +
for i in range(0,3):
 +
# Note: Une led est activée si l'on met la broche correspondante
 +
#      a GND.
 +
    p_rgb[i].value( not( state_tuple[i] ) )
 +
 
 +
# Faire un mix de deux états RGB pour en composer un troisième.
 +
# Rouge (True,False,False) + Bleu (False,False,True) = Magenta (True,False,True)
 +
def mix_color( color1, color2 ):
 +
    return (color1[0] | color2[0], color1[1] | color2[1], color1[2] | color2[2] )
 +
 
 +
# Désactivation des LEDs
 +
set_led( pRGB, (False, False, False) )
 +
 
 +
# Sequences d'allumage des LEDs R,G,B
 +
noir  = (False,False,False)
 +
rouge = (True,False,False)
 +
vert  = (False,True,False)
 +
bleu  = (False,False,True) 
 +
jaune = mix_color( rouge, vert )
 +
cyan  = mix_color( vert, bleu )
 +
magenta = mix_color( bleu, rouge )
 +
 +
COLORS = [ rouge, vert, bleu, jaune, cyan, magenta ]
 +
   
 +
# Afficher 100 couleurs aléatoirement
 +
for i in range( 100 ):
 +
# Choisir un index aléatoirement pour COLORS
 +
rnd = pyb.rng() % len( COLORS )
 +
couleur = COLORS[rnd]
 +
set_led( pRGB, couleur )
 +
 +
# Attendre 1/4 secondes
 +
pyb.delay( 250 )
 +
 +
# Tout éteindre
 +
set_led( pRGB, noir )</nowiki>
    
=== Contrôle analogique des couleurs ===
 
=== Contrôle analogique des couleurs ===
29 879

modifications

Menu de navigation