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 === |