Modifications

Sauter à la navigation Sauter à la recherche
1 852 octets ajoutés ,  12 juillet 2016 à 11:26
Ligne 2 : Ligne 2 :     
== Du GPIO vers l'écran ==
 
== Du GPIO vers l'écran ==
{{traduction}}
+
Nous pouvons maintenant afficher nos couleurs sur l'écran - faisons le aussi depuis les GPIOs!
   −
So, we can paint colours on the screen - let's do this from GPIs!
+
{{ADFImage|RASP-PYGAME-GUI-GPIO-00.jpg}}
   −
{{ADFImage|RASP-PYGAME-GUI-GPIO-00.jpg}}
+
Nous allons utiliser les boutons tactiles qui se trouvent le long de l'écran. Nous allons afficher le N° de GPIO et un fond d'écran coloré.  
   −
We'll use the four tactile buttons along the bottom of the screen to draw the GPIO number and a coloured background. From left to right the buttons correspond to GPIO #23, #22, #27, and #18.
+
De la gauche sur la droite (sur ce modèle de PiTFT) les boutons correspondent aux GPIO GPIO #23, #22, #27 et #18. Cette information est également lisible sur la sérigraphie.
   −
(Note: If you have a revision 1 board then #27 is #21 - you'll just have to change the code a little)
+
(Note: si vous disposez de la révision 1 de la carte alors c'est le GPIO #21 qui est utilisé à la place de #27 - Il vous faudra modifier un peu le code)
    
== Code d'initialisation ==
 
== Code d'initialisation ==
The code is split into two sections: le '''code d'initialisation''' (dit "''startup''" en anglais) et la '''boucle principale''' (dite "''main loop''" en anglais). Let's take a look at what's happening during startup.
+
Le code est divisé en deux sections: le '''code d'initialisation''' (dit "''startup''" en anglais) et la '''boucle principale''' (dite "''main loop''" en anglais). Voyons donc voir ce qui se passe durant le démarrage du programme (''dans le code d'initialisation'').
   −
This first section below imports a few things and then defines a datastructure for the four buttons. It's a simple map from GPIO number to RGB tuple. RGB tuples are used in a lot of pygame calls to set colors for fonts, backgrounds etc.
+
Au début du code, il y a quelques importations de module puis la définition de structure de donnée {{fname|button_map}} pour les 4 boutons. Il s'agit d'une simple correspondance entre le n° de GPIO et un tuple RGB (indiquant une couleur en rouge, vert, bleu). Les tuples RGB sont utilisés dans de nombreux appels PyGame pour modifier/initialiser la couleur des fonts, de l'arrière plan, etc.
   −
With the button map in place we can now loop through this and setup all the GPIOs. Each one needs to be set to an input with a pull-up since the buttons are connected to ground.
+
Avec la structure de correspondance en place (''souvent appelé "map" en anglais'') nous pourrons passer la revue cette structure et initialiser tous les GPIO des boutons. Chacune des broches GPIO des boutons doit être initialisée comme entrée avec la résistance Pull-Up (étant donné que les boutons sont connectés à la masse.
   −
Finally in this startup section we initialise pygame. The {{fname|os.putenv}} call here is setting up an environment variable for SDL to tell it which frame buffer device we want to use. We then initialise pygame, hide the mouse pointer, set the display size and fill the background in black.
+
Pour finir, cette section de démarrage initialise également PyGame. L'appel à {{fname|os.putenv}} initialise la variable d'environnement indiquant à la SDL quel périphérique Frame Buffer doit être utilisé pour l'affichage. Ensuite, nous initialisons pygame, cachons le pointeur de la souris, fixons la taille de l'écran et remplissons l'arrière plan en noir.
    
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
Ligne 27 : Ligne 27 :  
import RPi.GPIO as GPIO
 
import RPi.GPIO as GPIO
 
   
 
   
#Note #21 changed to #27 for rev2 Pi
+
#Note #21 changée en #27 pour le Pi rev2  
 
button_map = {23:(255,0,0), 22:(0,255,0), 27:(0,0,255), 18:(0,0,0)}
 
button_map = {23:(255,0,0), 22:(0,255,0), 27:(0,0,255), 18:(0,0,0)}
 
   
 
   
#Setup the GPIOs as inputs with Pull Ups since the buttons are connected to GND
+
# Configurer les GPIO comme entrée (INPUT) avec
 +
# activation de la résistance pull-up.
 +
# Le bouton placera le potentiel à la masse.
 
GPIO.setmode(GPIO.BCM)
 
GPIO.setmode(GPIO.BCM)
 
for k in button_map.keys():
 
for k in button_map.keys():
 
     GPIO.setup(k, GPIO.IN, pull_up_down=GPIO.PUD_UP)
 
     GPIO.setup(k, GPIO.IN, pull_up_down=GPIO.PUD_UP)
 
   
 
   
#Colours
+
# Couleur blanche
 
WHITE = (255,255,255)
 
WHITE = (255,255,255)
+
 
 +
# La SDL doit utiliser le FrameBuffer du PiTFT
 
os.putenv('SDL_FBDEV', '/dev/fb1')
 
os.putenv('SDL_FBDEV', '/dev/fb1')
 +
 +
# Init PyGame, cacher souris, taille écran
 
pygame.init()
 
pygame.init()
 
pygame.mouse.set_visible(False)
 
pygame.mouse.set_visible(False)
 
lcd = pygame.display.set_mode((320, 240))
 
lcd = pygame.display.set_mode((320, 240))
 +
 +
# remplir en noir
 
lcd.fill((0,0,0))
 
lcd.fill((0,0,0))
 +
 +
# Mise-à-jour affichage
 
pygame.display.update()
 
pygame.display.update()
 
   
 
   
Ligne 49 : Ligne 58 :     
== La boucle principale ==
 
== La boucle principale ==
Here we scan through the GPIOs to see if the buttons are pressed. We simply loop over the map we created earlier pulling out the GPIO number and the RGB tuple into k and v. If the GPIO is set False then the button is down. In which case we fill the background with the color referenced by v and then draw the text of the GPIO number.
+
Dans cette partie du code, nous allons scanner les GPIOS et tester les boutons pour voir si l'un d'entre-eux est pressé.  
 +
 
 +
Nous parcourons simplement la structure {{fname|button_map}} que nous avons précédemment créée. Nous allons récupérer des paires d'information (la clé et la valeur, respectivement appelés ''Key'' et ''Value''... ou ''k'' et ''v''). Ces paires d'information correspondent aux associations broche GPIO et couleur... tels qu'associés dans {{fname|button_map}} .
 +
 
 +
Si le GPIO (variable ''k'') est à {{fname|False}}, cela signifie le le bouton est enfoncé (pour la broche est ramenée au niveau bas/masse). Dans ce cas, nous remplissons le fond d'écran avec la couleur correspondante (la variable ''v'') et affichons le numéro du GPIO au centre de l'écran.
   −
Note the {{fname|sleep(0.1)}} call at the end of the loop. This simply ensures that our program is yielding and not running at 100% CPU usage.  
+
Notez l'appel à {{fname|sleep(0.1)}} qui fait une pause de 0.1 seconde en fin de boucle. Cela assure simplement que le programme cède sont temps machine au système d'exploitation pendant 0.1 seconde... ceka évite d'utiliser 100% du CPU.  
    
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
 
while True:
 
while True:
     # Scan the buttons
+
     # Scanner les bouton
 
     for (k,v) in button_map.items():
 
     for (k,v) in button_map.items():
 
         if GPIO.input(k) == False:
 
         if GPIO.input(k) == False:
 +
            # Remplir l'écran avec la couleur du bouton
 
             lcd.fill(v)
 
             lcd.fill(v)
 +
 +
            # Créer une "surface" contenant le rendu du texte à afficher
 +
            # Texte en blanc (white)
 
             text_surface = font_big.render('%d'%k, True, WHITE)
 
             text_surface = font_big.render('%d'%k, True, WHITE)
 +
            # Retourne une aire rectangulaire de la surface
 +
            # MAIS EN FAISANT un centrage
 
             rect = text_surface.get_rect(center=(160,120))
 
             rect = text_surface.get_rect(center=(160,120))
 +
            # Dessine/applique la surface Text_Surface sur l'écran (la surface "lcd")
 
             lcd.blit(text_surface, rect)
 
             lcd.blit(text_surface, rect)
 +
 +
            # Mise à jour de l'écran
 
             pygame.display.update()
 
             pygame.display.update()
 
     sleep(0.1)
 
     sleep(0.1)
Ligne 67 : Ligne 89 :     
== Exécuter le projet ==
 
== Exécuter le projet ==
 +
Vous pouvez également exécuter cet exemple depuis le projet pygamelcd:
 +
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
You can also run this from the pygamelcd project:
+
sudo python test2.py
 
</syntaxhighlight>
 
</syntaxhighlight>
    
{{RASP-PYGAME-GUI-TRAILER}}
 
{{RASP-PYGAME-GUI-TRAILER}}
29 918

modifications

Menu de navigation