Modifications

Sauter à la navigation Sauter à la recherche
13 811 octets ajoutés ,  28 septembre 2015 à 07:22
Ligne 243 : Ligne 243 :  
=== Idées ===
 
=== Idées ===
 
* Vous savez maintenant comment créer des images de deux façons différentes, essayez de créer vos propres images ou sprites.
 
* Vous savez maintenant comment créer des images de deux façons différentes, essayez de créer vos propres images ou sprites.
* Saurez vous pouvez alterner les images pour créer une animation? Check out this Geek Gurl Diaries video for some inspiration.
+
* Saurez vous pouvez alterner les images pour créer une animation? Vous pouvez également [https://www.youtube.com/watch?v=b84EywkQ3HI visionner cette vidéo du journal "Geek Gurl Diaries"] (''anglais'') et voir si cela vous inspire des idées.
    
== Modifier l'orientation ==
 
== Modifier l'orientation ==
 
[[Fichier:hat-sense-banner-03.jpg]]
 
[[Fichier:hat-sense-banner-03.jpg]]
   −
So far, all our text and images have appeared the same way up, assuming that the HDMI port is at the bottom. However, this may not always be the case (especially in space) so you may want to change the orientation of the matrix. To do this, you can use the {{fname|sense.set_rotation()}} method and inside the brackets enter one of four angles (0, 90, 180, 270).
+
Jusque là, tout notre texte et les images sont apparu dans le même sense, en s'assurant que le port HDMI est vers le bas. Cependant, ce ne sera peut être pas toujours le cas (surtout dans l'espace). Par conséquent vous pourriez avoir besoin de changer l'orientation de la matrice. Pour changer l'orientation, vous pouvez utiliser la méthode {{fname|sense.set_rotation()}} et saisir l'un des quatre angles 0, 90, 180, 270 entre les parenthèses.
   −
To rotate your screen by 180 degrees you'd use this line:
+
Vous pouvez utiliser la ligne suivante pour faire une rotation de 180 degrés à l'écran:
    
  <nowiki>sense.set_rotation(180)</nowiki>
 
  <nowiki>sense.set_rotation(180)</nowiki>
   −
'''1.''' When used in the rainbow program it would look like this:
+
'''1.''' Cela donne le programme suivante lorsque nous utilisons {{fname|sense.set_rotation}} dans le programme {{fname|rainbow.py}} (le programme Arc-En-ciel):
    
  <nowiki>from sense_hat import SenseHat
 
  <nowiki>from sense_hat import SenseHat
Ligne 283 : Ligne 283 :  
sense.set_rotation(180)</nowiki>
 
sense.set_rotation(180)</nowiki>
   −
'''2.''' Click "File -- Save As", give your program a name e.g. {{fname|rainbow_flip.py}}, then press '''F5''' to run.
+
'''2.''' Cliquez sur "File -- Save As" (fichier -- sauver comme) et donnez un nom à votre programme - par exemple {{fname|rainbow_flip.py}}. Pressez ensuite la touche '''F5''' pour démarrer le programme.
   −
'''3.''' You could also create spinning text using a for loop:
+
'''3.''' Vous pouvez également créer une rotation en utilisant une boucle {{fname|for}}:
    
  <nowiki>from sense_hat import SenseHat
 
  <nowiki>from sense_hat import SenseHat
Ligne 299 : Ligne 299 :  
     time.sleep(0.5)</nowiki>
 
     time.sleep(0.5)</nowiki>
   −
This program displays the letter "J" and then sets the rotation to each value in the angles list with a 0.5 second pause.
+
Ce programme affiche la lettre "J" puis active la rotation pour chacune des valeurs contenue dans la liste {{fname|angles}} (et fait également une pause de 0.5 seconde).
   −
'''4.''' Click "File -- Save As", give your program a name e.g. {{fname|spinning_j.py}}, then press '''F5''' to run.
+
'''4.''' Cliquez sur "File -- Save As" (Fichier -- sauver comme) et donnez un nom à votre programme - par exemple {{fname|spinning_j.py}}. Pressez la touche '''F5''' pour exécutez le programme.
   −
'''5.''' You can also flip the image on the screen, either horizontally or vertically, using these lines:
+
'''5.''' Vous pouvez également retourner l'image, soit horizontalement, soit verticalement sur l'afficheur. Cette opération de retournement se dit "''flip''" en anglais. Vous pouvez réaliser ces opérations en utilisant les lignes suivantes:
    
  <nowiki>sense.flip_h()</nowiki>
 
  <nowiki>sense.flip_h()</nowiki>
Ligne 311 : Ligne 311 :  
  <nowiki>sense.flip_v()</nowiki>
 
  <nowiki>sense.flip_v()</nowiki>
   −
With this example you could create a simple animation by flipping the image repeatedly:
+
Avec cet exemple, vous pouvez créer une animation simple en retournant répétitivement l'image:
    
  <nowiki>from sense_hat import SenseHat
 
  <nowiki>from sense_hat import SenseHat
Ligne 318 : Ligne 318 :  
sense = SenseHat()
 
sense = SenseHat()
   −
w = [150, 150, 150]
+
w = [150, 150, 150] # W pour White (blanc)
b = [0, 0, 255]
+
b = [0, 0, 255]     # B pour Blue  (bleu)
e = [0, 0, 0]
+
e = [0, 0, 0]       # E pour Empty (vide... soit noir/éteint)
    
image = [
 
image = [
Ligne 339 : Ligne 339 :  
     sense.flip_h()</nowiki>
 
     sense.flip_h()</nowiki>
   −
'''6.''' Click "File -- Save As", give your program a name e.g. {{fname|eyes.py}}, then press "F5" to run.
+
'''6.''' Cliquez sur "File -- Save As" (fichier -- sauver comme) et donner un nom à votre programme - par exemple {{fname|eyes.py}}, signifiant "yeux". Pressez la touche "F5" pour exécuter le programme.
    
=== Idées ===
 
=== Idées ===
* Create a spinning image, using one of the drawing techniques shown already, and then use the sense.set_rotation method to make it spin.
+
* Créer une image qui tourne en utilisant les technique déjà présentée et ensuite utiliser la méthode {{fname|sense.set_rotation}} pour la faire tourner.
* Using what you've done so far, you should be able to make an electronic dice like the one shown here:
+
* Utiliser ce que nous avons appris pour créer un dé électronique comme celui visible sur la vidéo ci-dessous:
    
[[fichier:RASP-SENSE-HAT-ASTRO-PI-Debuter-20.jpg|link=https://www.youtube.com/watch?v=4jT7GyyudP4]]<br />[https://www.youtube.com/watch?v=4jT7GyyudP4 Cliquer ici pour voir la vidéo YouTube correspondant]
 
[[fichier:RASP-SENSE-HAT-ASTRO-PI-Debuter-20.jpg|link=https://www.youtube.com/watch?v=4jT7GyyudP4]]<br />[https://www.youtube.com/watch?v=4jT7GyyudP4 Cliquer ici pour voir la vidéo YouTube correspondant]
   −
This dice makes use of:
+
Ce dé utile:
* Affichage de texte
+
* l'affichage de texte
* Gestion du temps (''timing'')
+
* la gestion du temps (''timing'')
* Modification d'orientation
+
* la modification d'orientation
* Génération de nombre aléatoire
+
* la génération de nombre aléatoire
* Variables
+
* les variables
    
== Ressentir l'environnement ==
 
== Ressentir l'environnement ==
Ligne 358 : Ligne 358 :  
[[Fichier:hat-sense-banner-04.jpg]]
 
[[Fichier:hat-sense-banner-04.jpg]]
   −
The Sense HAT has a set of environmental sensors for detecting the conditions around it. It can detect:
+
Le Sense HAT dispose d'un ensemble de senseur environnemental lui permettant de détecter les conditions autour de lui. Il peu détecter:
* Pressure
+
* La pression (dit "Pressure" en anglais).
* Temperature
+
* La température (dit "Temperature" en anglais).
* Humidity
+
* L'humidité (dit "Humidity" en anglais).
   −
We can collect these readings using three simple methods:
+
Nous pouvons obtenir ces informations à l'aide de 3 sméthodes simples:
   −
* {{fname|sense.get_temperature()}} - This will return the temperature in Celsius.
+
* {{fname|sense.get_temperature()}} - qui retourne la température en degrés Celsius.
* {{fname|sense.get_pressure()}} - This will return the pressure in millibars.
+
* {{fname|sense.get_pressure()}} - qui retourne la pression en millibars.
* {{fname|sense.get_humidity()}} - This will return the humidity as a percentage.
+
* {{fname|sense.get_humidity()}} - qui retourne le taux d'humidité sous forme d'un pourcentage.
   −
'''1.''' Using these, we could create a simple scrolling text display which could keep people informed about current conditions.
+
'''1.''' En utilisant ces méthode, nous pouvons créer un texte défilant qui permet de tenir les gens informé des conditions athmosphériques.
    
  <nowiki>from sense_hat import SenseHat
 
  <nowiki>from sense_hat import SenseHat
Ligne 379 : Ligne 379 :  
     h = sense.get_humidity()
 
     h = sense.get_humidity()
   −
     t = round(t, 1)
+
     t = round(t, 1) # arrondis la valeur à une décimale après la virgule
 
     p = round(p, 1)
 
     p = round(p, 1)
 
     h = round(h, 1)
 
     h = round(h, 1)
   −
     msg = "Temperature = %s, Pressure=%s, Humidity=%s" % (t,p,h)
+
     msg = "Temperature = %s, Pression=%s, Humidite=%s" % (t,p,h)
    
     sense.show_message(msg, scroll_speed=0.05)</nowiki>
 
     sense.show_message(msg, scroll_speed=0.05)</nowiki>
   −
'''2.''' Click "File -- Save As", give your program a name e.g. {{fname|env.py}}, then press '''F5''' to run.
+
'''2.''' Cliquez sur "File -- Save As" (fichier -- sauver comme) et donner un nom à votre programme - par exemple {{fname|env.py}} pour environnement. Pressez ensuite la touche '''F5''' pour exécuter le programme.
   −
'''3.''' You could now use some colour to let the astronauts know whether conditions are within sensible ranges.
+
'''3.''' Vous pouvez également utiliser un peu de couleur pour permettre aux astronaute de savoir si les conditions actuelles se trouve dans une gamme de valeurs plus sensibles.
   −
According to some [http://wsn.spaceflight.esa.int/docs/Factsheets/30%20ECLSS%20LR.pdf online documentation] (''ESA, anglais''), the International Space Station maintains these conditions at the following levels:
+
En fonction de cette [http://wsn.spaceflight.esa.int/docs/Factsheets/30%20ECLSS%20LR.pdf documentation en ligne] (''ESA, anglais''), nous savons que la station spatiale internationale maintient ces 3 paramètres aux niveaux suivants:
* Temperature (18.3 - 26.7 Celsius)
+
* Température: (18.3 - 26.7 Celsius)
* Pressure (979 - 1027 millibars)
+
* Pression: (979 - 1027 millibars)
* Humidity (around 60%)
+
* Humidité: (autour de 60%)
   −
You could use an if statement in your code to check these conditions, and set a background colour for the scroll:
+
Vous pouvez utiliser une instruction {{fname|if}} danns votre code pour vérifier ces conditions et modifier la couleur de l'arrière plan (le ''background color'' en anglais) pendant le défilement du texte:
    
  <nowiki>if t > 18.3 and t < 26.7:
 
  <nowiki>if t > 18.3 and t < 26.7:
     bg = [0, 100, 0] # green
+
     bg = [0, 100, 0] # Vert
 
else:
 
else:
     bg = [100, 0, 0] # red</nowiki>
+
     bg = [100, 0, 0] # Rouge</nowiki>
   −
Your complete program would look like this:
+
Votre programme complété devrait ressembler à ceci:
    
  <nowiki>from sense_hat import SenseHat
 
  <nowiki>from sense_hat import SenseHat
Ligne 418 : Ligne 418 :     
     if t > 18.3 and t < 26.7:
 
     if t > 18.3 and t < 26.7:
         bg = [0, 100, 0]  # green
+
         bg = [0, 100, 0]  # vert
 
     else:
 
     else:
         bg = [100, 0, 0]  # red
+
         bg = [100, 0, 0]  # rouge
   −
     msg = "Temperature = %s, Pressure=%s, Humidity=%s" % (t, p, h)
+
     msg = "Temperature = %s, Pression=%s, Humidite=%s" % (t, p, h)
    
     sense.show_message(msg, scroll_speed=0.05, back_colour=bg)</nowiki>
 
     sense.show_message(msg, scroll_speed=0.05, back_colour=bg)</nowiki>
   −
'''4.''' Click "File -- Save As", give your program a name e.g. {{fname|scrolling_env.py}}, then press "F5" to run.
+
'''4.''' Cliquez sur "File -- Save As" (Fichier -- Sauver comme) et donnez lui un nom - par exemple {{fname|scrolling_env.py}} signifiant ''environnement defilant''. Pressez la touche "F5" pour exécuter votre programme.
    
=== Idées ===
 
=== Idées ===
* Currently, the scrolling program only warns about abnormal temperature. Can you add the same behaviour for pressure and humidity?
+
* Pour le moment, le programme défilant nous alerte uniquement en cas de température anormale. Pouvez-vous modifier sont fonctionnement pour tenir compte de la pression et de l'humidité?
* You could create a simple graphical thermometer which outputs different colours / patterns depending on the temperature.
+
* Vous pouvez créer un thermomètre graphique qui change de couleur / motif en fonction de la température.
* If you haven't done so already, experiment with a bottle and the pressure sensor.
+
* Si vous ne l'avez pas encore fait, vous pouvez utiliser une bouteille pour tester le senseur de pression (voyez nos autre tutoriels).
    
== Détecter les mouvements ==
 
== Détecter les mouvements ==
 
[[Fichier:hat-sense-banner-05.jpg]]
 
[[Fichier:hat-sense-banner-05.jpg]]
   −
The Sense HAT has a set of sensors that can detect movement. It has an IMU (inertial measurement unit) chip which includes:
+
Le Sense HAT dispose également de senseurs qui peuvent détecter le mouvement. Il est équipé d'une centrale de mesure inertielle (dite IMU pou ''Inertial Measurement Unit'') sous forme d'une puce qui inclus:
* A gyroscope (for detecting which way up the board is)
+
* Un gyroscope (pour détecter dans quelle direction la carte est orientée)
* An accelerometer (for detecting movement)
+
* Un accéléromètre (pour détecter le mouvement)
* A magnetometer (for detecting magnetic fields)
+
* Un magnétomètre (pour détecter les champs magnétiques)
   −
Before you start experimenting with motion sensing, it's important to understand three key terms covered in the guide and in [https://www.youtube.com/watch?v=pQ24NtnaLl8 this video].
+
Avant de commencer vos expériences avec les senseurs de mouvement, il est important de comprendre 3 termes clés couverts par se guide et dans cette [https://www.youtube.com/watch?v=pQ24NtnaLl8 vidéo] (''en anglais'').
   −
The three axes uses to describe motion are:
+
Les 3 axes utilisés pour décrire le mouvement sont:
* Pitch (like a plane taking off)
+
* Elévation, dit "Pitch" en anglais (comme quand l'avion décolle)
* Roll (the plane doing a victory roll)
+
* Roulis/Roulement, dit "Roll" en anglais (comme un avion qui faire la rouleau de la victoire, ou une voiture qui fait un tonneau)
* Yaw (imagine steering the plane like a car)
+
* Lacet/Embardée, dit "Yaw" en anglais  (imaginez un avion qui dévie de sa route comme le ferait une voiture, où une voiture qui prend un virage "en lacet")
   −
[[Fichier:RASP-SENSE-HAT-ASTRO-PI-Debuter-29.png]]
+
Etant donné que l'interface de programmation du Sense Hat utilise ces mêmes mots clés en anglais pour vous permettre d'accéder aux valeurs, nous allons préserver les termes "Pitch"n "Roll", "Yaw".
 +
 
 +
[[Fichier:RASP-SENSE-HAT-ASTRO-PI-Debuter-29.png|800px]]
    
[[Fichier:RASP-SENSE-HAT-ASTRO-PI-Debuter-30.jpg]]
 
[[Fichier:RASP-SENSE-HAT-ASTRO-PI-Debuter-30.jpg]]
   −
{{traduction}}
+
Vous pouvez obtenir l'orientation du Sense Hat en appelant la méthode {{fname|sense.get_orientation()}}:
 +
 
 +
<nowiki>pitch, roll, yaw = sense.get_orientation().values()</nowiki>
 +
 
 +
Cela donne les trois valeurs d'orientation (mesuré en degrés) et stocke ces valeurs dans trois variables respectivement nommées {{fname|pitch}}, {{fname|roll}} et {{fname|yaw}}. La partie {{fname|.values()}} de l'appel obtient les 3 valeurs ce qui permet de les stocker séparément.
 +
 
 +
'''1.''' Vous pouvez découvrir et explorer ces valeurs à l'aide du programme suivant:
 +
 
 +
<nowiki>from sense_hat import SenseHat
 +
 
 +
sense = SenseHat()
 +
 
 +
while True:
 +
    pitch, roll, yaw = sense.get_orientation().values()
 +
    print("Elevation/pitch=%s, Roulis/roll=%s, Embardee/yaw=%s" % (pitch,yaw,roll))</nowiki>
 +
 
 +
'''2.''' Cliquer sur "File -- Save As" (''Fichier -- Sauver comme'') et donner un nom au programme - exemple {{fname|orientation.py}}. Pressez '''F5''' pour exécuter le programme.
 +
 
 +
{{tmbox|text=Note: Lorsque l'on utilise des senseurs de mouvement, il est important de les interroger souvent à l'aide d'une boucle très courte. Par exemple, une pause de 0.5 seconde dans votre boucle provoquera un affichage un affichage bizarre. C'est parce que le code de la bibliothèque à besoin de faire beaucoup de mesure de façon à parfaitement combiner les données provenant du gyroscope, accéléromètre et du magnétomètre.}}
 +
 
 +
'''3.''' Une autre façon de détecter l'orientation est d'utiliser la méthode {{fname|sense.get_accelerometer_raw()}} qui vous indique la quantité de force-g agissant sur les 3 axes. Si n'importe quel axe indique une valeur d'environ 1g alors cet axe pointe vers le bas.
 +
 
 +
Dans cette exemple, la 'accélération gravitationnelle (celle qui nous tient au sol) est quantifié pour chaque axe  (x, y et z) puis arrondi au nombre entier le plus proche:
 +
 
 +
<nowiki>from sense_hat import SenseHat
 +
 
 +
sense = SenseHat()
 +
 
 +
while True: # boucle inifinie
 +
    x, y, z = sense.get_accelerometer_raw().values()
 +
 
 +
    x=round(x, 0)
 +
    y=round(y, 0)
 +
    z=round(z, 0)
 +
 
 +
    print("x=%s, y=%s, z=%s" % (x, y, z))</nowiki>
 +
 
 +
'''4.''' Cliquer sur "File -- Save As" (''Fichier -- Sauver comme'') et donner un nom au programme - par exemple {{fname|acceleration.py}}. Ensuite, presser F5 pour exécuter le programme.
 +
 
 +
En tournant l'écran, vous devriez vous les valeurs de x et y osciller entre -1 et 1. Si vous placez le Pi à plat (ou retourner votre Pi), l'axe Z afficher la valeur 1 puis -1.
 +
 
 +
'''5.''' Si vous connaissez l'orientation de votre Pi... alors vous pouvez modifier l'orientation d'affichage de la matrice de sorte que le texte soit toujours lisible. C'est exactement comme cela que votre smartphone détecte le changement d'orientation pour faire une rotation de l'écran.<br />Pour commencer, vous afficher quelque-chose sur la matrice puis vous vérifiez constalement l'orientation de la carte. Vous utiliser cette information d'orientation pour faire une mise-à-jour de l'orientation de l'afficheur.
 +
 
 +
<nowiki>from sense_hat import SenseHat
 +
 
 +
sense = SenseHat()
 +
 
 +
sense.show_letter("J")
 +
 
 +
while True:
 +
    x, y, z = sense.get_accelerometer_raw().values()
 +
 
 +
    x = round(x, 0)
 +
    y = round(y, 0)
 +
 
 +
    if x == -1:
 +
        sense.set_rotation(180)
 +
    elif y == 1:
 +
        sense.set_rotation(90)
 +
    elif y == -1:
 +
        sense.set_rotation(270)
 +
    else:
 +
        sense.set_rotation(0)</nowiki>
 +
 
 +
 
 +
 
 +
'''6.''' Cliquer sur "File -- Save As" (''Fichier -- Sauver comme'') et donner un nom au programme - {{fname|rotating_letter.py}} par exemple (signifiant ''lettre tournante''). Pressez ensuite '''F5''' pour exécuter le programme.
 +
 
 +
Dans ce programme, vous utilisez une structure {{fname|if, elif, else}} pour détecter l'orientation du Raspberry-Pi. Le {{fname|if}} et {{fname|elif}} teste les trois orientation ET si l'orientation ne correspond à aucun des orientations testées par le programme ALORS le programme considère de l'orientation est ''correcte''. En utilisant l'instruction {{fname|else}} nous couvrons également tous les autres cas, comme lorsque la carte est inclinée de 45 degrées ou reposée sur un présentoir incliné.
 +
 
 +
'''7.''' Si vous ne faites que tourner la carte, vous remarquerez par l'expérience qu'il n'y a que '''1g''' dans chaque direction; Si nous la secouons, le senseur détectera des accélérations '''supérieure à 1g'''. Nous pourrions détecter ce '''mouvement rapide''' et y répondre. Nous allons introduire la fonction {{fname|abs()}} pour les besoins du programme suivant. {{fname|abs()}} n'est pas spécifique à la bibliothèque Sense_Hat et fait partie des éléments standard de Python. {{fname|abs()}}} nous donne la grandeur d'une valeur en ignorant volontairement si cette valeur est positive ou négative. Donc {{fname|abs(3.1415)}} donne 3.1514 et {{fname|abs(-3.1415)}} donne également 3.1514. La fonction {{fname|abs()}} est très utile puisque nous ne voulons pas savoir dans quelle direction le senseur est secoué... nous voulons juste savoir qu'il est secoué.
 +
 
 +
<nowiki>from sense_hat import SenseHat
 +
 
 +
sense = SenseHat()
 +
 
 +
while True:
 +
    x, y, z = sense.get_accelerometer_raw().values()
 +
 
 +
    x = abs(x)
 +
    y = abs(y)
 +
    z = abs(z)
 +
 
 +
    if x > 1 or y > 1 or z > 1:
 +
        sense.show_letter("!", text_colour=[255, 0, 0])
 +
    else:
 +
        sense.clear()</nowiki>
 +
 
 +
 
 +
 
 +
'''8.''' Cliquer sur "File -- Save As" (''fichier -- Sauver sous'') et donner lui un nom - par exemple {{fname|shake.py}} (en anglais "shake" signifie ''secouer''). Presser '''F5''' pour démarrer le programme.
 +
 
 +
Si le programme semble trop sensible, vous pouvez remplacer la valeur 1 par une valeur supérieure.
 +
 
 +
=== Idées ===
 +
* Vous pourriez écrire un programme qui affiche une une flèche Y(ou autre symbole) sur l'écran; le symbol peut etre utilisé pour indiquer où se trouve le sol. Cela permettrait à des astronaute (évoluant en basse gravité) de savoir où se trouve la terre.
 +
* Vous pourriez améliorer le programme "Dé" (voir les activités précédentes) pour ''jeter le Dé'' en secouant le dé.
 +
* Vous pourriez utiliser l'accéléromètre pour détecter les petits mouvements; Cela pourrait agir comme contrôleur de jeu, système d'alarme, détecteur de tremblement de terre.
    
== Tout mettre ensemble ==
 
== Tout mettre ensemble ==
 
[[Fichier:hat-sense-banner-06.jpg]]
 
[[Fichier:hat-sense-banner-06.jpg]]
 +
 +
Maintenant que vous avez exploré les possibilités du Sense Hat, vous pourriez les combiner pour créer des projets. Voici un exemple de jeu testant la réaction humaine, jeu qui pourrait être utilisé par des astronautes pour tester leurs réflexes.
 +
 +
Le jeu affiche une flèche sur la matrice LED en choisissant une orientation au hasard. Le joueur doit tourner la carte pour garder la flèche vers le haut. S'il le fait dans le temps imparti, la flèche devient verte et le score augmente; dans le cas contraire, la flèche devient rouge et le jeu est terminé. Le jeu continue d'afficher des flèches dans des directions aléatoires jusqu'au moment où le joueur à perdu, et le jeu va de plus en plus vite.
 +
 +
Cette idée combine:
 +
* L'affichage de message et images sur la matrice LED.
 +
* Sélection et détection d'une orientation
 +
* L'utilisation de variables, nombre aléatoire, itération et sélection
 +
 +
Il s'agit d'un programme plus compliqué que les exemples précédents, il est donc préférable d'identifier les étapes clés en les décrivant dans un  '''pseudocode'''.
 +
 +
<nowiki>importer les bibliothèques nécessaires (sense_hat, time, random)
 +
    Créer l'objet ''sense''
 +
 +
    Definir les couleurs nécessaire
 +
    Créer 3 flèches différentes: une blanche (''white'' en anglais), verte (''green'' en anglais) et rouge (''red'').
 +
    Initialiser la variable "pause" à 3 (Le temps initial entre chaque round)
 +
    Initialiser les variables "score" et "angle" à 0
 +
    Créer une variable "play" (signifiant "''jeu''") initialisée à True (Elle sera utilisé pour arrêter le jeu)
 +
 +
    Commencer la boucle while pour continuer le jeux tant que "play" est à True.
 +
        while play == True
 +
    Choisir un nouvel angle au hasard en utilisant la méthode random.choice()
 +
    Afficher une flèche blanche et attendre le temps indiqué dans pause
 +
    Vérifier si l'orientation correspond à la flèche
 +
    ---Si c'est le cas Alors ajouter un point et passer la flèche en vert.
 +
    ---Sinon fixer "play" à False (pour arrêter le jeu) et afficher une flèche rouge
 +
    Diminuer un peu le temps de pause
 +
    Faire une pause avant la prochaine flèche.
 +
 +
    Lorsque la boucle while est terminée, afficher un message avec le score</nowiki>
 +
 +
Si vous transformez ce pseudo code en Python, vous obtiendrez un code similaire à celui-ci:
 +
 +
<nowiki>from sense_hat import SenseHat
 +
import time
 +
import random
 +
 +
sense = SenseHat()
 +
 +
# Initialiser les couleur
 +
 +
w = [150, 150, 150] # w = white (blanc)
 +
g = [0, 255, 0]    # g = green (vert)
 +
r = [255, 0, 0]    # r = red  (rouge)
 +
e = [0, 0, 0]      # e = empty (vide... donc noir)
 +
 +
# créer les images de flèche avec 3 couleurs
 +
# différentes
 +
 +
# arrow = flèche
 +
 +
arrow = [
 +
e,e,e,w,w,e,e,e,
 +
e,e,w,w,w,w,e,e,
 +
e,w,e,w,w,e,w,e,
 +
w,e,e,w,w,e,e,w,
 +
e,e,e,w,w,e,e,e,
 +
e,e,e,w,w,e,e,e,
 +
e,e,e,w,w,e,e,e,
 +
e,e,e,w,w,e,e,e
 +
]
 +
 +
# arrow_red = flèche_rouge
 +
 +
arrow_red = [
 +
e,e,e,r,r,e,e,e,
 +
e,e,r,r,r,r,e,e,
 +
e,r,e,r,r,e,r,e,
 +
r,e,e,r,r,e,e,r,
 +
e,e,e,r,r,e,e,e,
 +
e,e,e,r,r,e,e,e,
 +
e,e,e,r,r,e,e,e,
 +
e,e,e,r,r,e,e,e
 +
]
 +
 +
# arrow_green = fleche_verte
 +
 +
arrow_green = [
 +
e,e,e,g,g,e,e,e,
 +
e,e,g,g,g,g,e,e,
 +
e,g,e,g,g,e,g,e,
 +
g,e,e,g,g,e,e,g,
 +
e,e,e,g,g,e,e,e,
 +
e,e,e,g,g,e,e,e,
 +
e,e,e,g,g,e,e,e,
 +
e,e,e,g,g,e,e,e
 +
]
 +
 +
pause = 3
 +
score = 0
 +
angle = 0
 +
play = True
 +
 +
sense.show_message("Garder la fleche pointee en haut", scroll_speed=0.05, text_colour=[100,100,100])
 +
 +
while play:
 +
    last_angle = angle # Mémoriser le dernier angle
 +
    while angle == last_angle:
 +
        angle = random.choice([0, 90, 180, 270])
 +
    sense.set_rotation(angle)
 +
    sense.set_pixels(arrow)
 +
    time.sleep(pause)
 +
 +
    x, y, z = sense.get_accelerometer_raw().values()
 +
    x = round(x, 0)
 +
    y = round(y, 0)
 +
 +
    print(angle)
 +
    print(x)
 +
    print(y)
 +
 +
    if x == -1 and angle == 180:
 +
        sense.set_pixels(arrow_green)
 +
        score += 1
 +
    elif x == 1 and angle == 0:
 +
      sense.set_pixels(arrow_green)
 +
      score += 1
 +
    elif y == -1 and angle == 90:
 +
      sense.set_pixels(arrow_green)
 +
      score += 1
 +
    elif y == 1 and angle == 270:
 +
      sense.set_pixels(arrow_green)
 +
      score += 1
 +
    else:
 +
      sense.set_pixels(arrow_red)
 +
      play = False
 +
 +
    pause = pause * 0.95
 +
    time.sleep(0.5)
 +
 +
msg = "Votre score etait de %s" % score
 +
sense.show_message(msg, scroll_speed=0.05, text_colour=[100, 100, 100])</nowiki>
 +
 +
'''1.''' cliquer sur "File -- Save As" (''Fichier -- Sauver sous'') et donner un nom à votre programme - par exemple {{fname|reaction_game.py}} ("game" signifie ''jeu'' et "reaction" ''réaction''). Ensuite, pressez sur '''F5''' pour exécuter le programme.
 +
 +
Voici une vidéo montrant comment fonctionne le programme:
 +
 +
[[Fichier:RASP-SENSE-HAT-ASTRO-PI-Debuter-40.jpg|link=https://www.youtube.com/watch?v=k1ZB8jORb74]]<small><br />Vous pouvez également [https://www.youtube.com/watch?v=k1ZB8jORb74 cliquer ici pour visionner la vidéo YouTube]
 +
 +
=== Idées ===
 +
Il y a beaucoup de potentiel de développement avec ce jeu:
 +
* Jouer sur l'orientation et le secouage.
 +
* Utiliser le senseur de température pour détecter l'haleine... une des actions demandée à l'utilisateur serait de souffler sur le détecteur d'humitidé.
 +
* Utiliser plus que les 4 directions du programme d'exemple; il pourrait être demandé au joueur de placer la carte à 45°C.
    
{{RASP-SENSE-HAT-ASTRO-PI-TRAILER}}
 
{{RASP-SENSE-HAT-ASTRO-PI-TRAILER}}
29 917

modifications

Menu de navigation