Ce document, basé sur du contenu de France-IOI, est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International.
Auteur du document original : Eric Madec de l'académie de Rennes. Le document a été légèrement modifié.
Rendez-vous à l'adresse : https://amazon.quick-pi.org/ pour apprendre à programmer vos objets connectés en Python en réalisant les activités du Parcours 1.
Copier ci-dessous le code d'accès personnel fourni par l'enseignant :
.........
Lisez la présentation pour programmer en python , écrire, tester puis valider votre programme avec interface France IOI.
Au fur et à mesure que vous expérimentez et validez vos programmes par simulation pour chaque étape, recopiez votre script dans les cellules de code vides ci-dessous...
Un tutoriel video de présentation de QuickPi https://tube.ac-lyon.fr/videos/watch/playlist/33c4984a-b64e-46cb-b0eb-3118f9728953
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
- LED rouge : -.-.-.--.-.-. - LED verte : .......------Les LEDs doivent être éteintes à la fin du programme.
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
# Recopier le code ici
from robot import * droite() haut() droite()Le programme ci-dessus fait déplacer le robot vers la droite, puis vers le haut, puis de nouveau vers la droite.
if
:¶if
, on peut exécuter une instruction uniquement dans certaines conditions.
if caseMarquee(): peindre()Par exemple, le programme ci-dessus teste le contenu de la case du robot, et ne la peint que si elle est marquée. On peut aussi placer plusieurs instructions dans une instruction if, comme illustré ci-dessous :
if caseMarquee(): peindre() droite()### L'instruction
if/else
On peut utiliser une instruction if/else
, pour effectuer des opérations différentes selon la situation. Par exemple :
if caseMarquee(): peindre() else: haut()Dans le programme ci-dessus, si la case du robot est marquée, le robot la peint, sinon il ne la peint pas mais se déplace vers le haut.
for
¶for k in range(...)
Par exemple, plutôt que de mettre 5 fois la même instruction :
droite() droite() droite() droite() droite()On peut écrire la boucle suivante :
for k in range(5): droite()On peut aussi mettre plusieurs instructions dans une boucle :
for k in range(5): droite() haut()La situation la plus courante est :
Pour k allant de 1 à 10 répéter Bloc d'instructions FinPourSa traduction en `Python` est :
# flux parent for k in range(1, 11): # bloc d'instructions # retour au flux parentOn remarque l'utilisation `range(1, 11)` alors qu'on attendrait `range(1, 10)`. En fait
range(1, 11)
retourne un _itérateur_, qui va parcourir avec un incrément de 1 tous les entiers $n$ tels que $1 \leqslant n < 11$.
Il faut bien se souvenir que la borne supérieure de range(n, m)
est exclue mais il est facile de retenir que le nombre de tours de boucles est m - n.
Par exemple, pour calculer la somme des tous les entiers consécutifs de 100 à 200, on peut écrire :
somme = 0 for k in range(100, 201): somme = somme + k print("La somme est ", somme)S'il s'agit juste de répéter `n` fois un bloc d'instructions on utilise le raccourci
range(n)
au lieu de range(0, n)
ou de range(1, n + 1)
.
Par exemple pour dire 100 fois "Merci", on peut écrire :
for k in range(100): print("Merci !") print("Ouf!")
while
¶Tant Que Condition répéter Bloc d'instructions Fin Tant QueElle se traduit en `Python` par :
# flux parent while condition: # bloc d'instructions indenté # retour au flux parentPar exemple, pour demander la saisie d'un login jusqu'à une saisie correcte, on peut écrire :
login = 'moi' while input('Login ?') != login: # test d'entrée de boucle print("Essaie encore !") print('Bienvenue ', login) # sortie de boucleÉvidemment, on peut aboutir à une _boucle infinie_ si la condition d'entrée de boucle n'est jamais vérifiée. Parfois une boucle infinie est le comportement souhaité, par exemple pour un programme qui doit surveiller des événéments par l'intermédiaire d'écouteurs logiciels (Javascript dans le navigateur) ou de capteurs physiques (de lumière, de température ...). On peut utiliser l'instruction `while True :` pour répéter sans fin une séquence d'instructions, comme dans l'exemple ci-dessous, qui allume et éteint une LED toutes les 500 millisecondes :
while True : allumerLED() attendre(1000) eteindreLED() attendre(1000)L'instruction
while True :
exécute en boucle les instructions placées en dessous, indentées vers la droite, sans s'arrêter, jusqu'à ce que l'on interrompe l'exécution du programme.
Ce type de boucle est utile pour les programmes qui ne doivent jamais s'arrêter, par exemple le programme d'un système d'alarme, qui doit être actif en permanence.
for
, à l'intérieur d'autres boucles for
.
Par exemple :
for i in range(5): droite() for j in range(3): haut() droite()Ce programme répétera 5 fois un déplacement d'1 case vers la droite, 3 cases vers le haut et 1 case vers la droite.
L'interface comporte deux onglets EXPÉRIMENTER et VALIDER, qui correspondent à deux modes d'utilisation différents.
C'est à droite dans l'éditeur que vous allez écrire vos programmes en langage python.
Votre programme doit toujours commencer par la ligne from quickpi import *
.
Cette ligne de code permet de pouvoir utiliser les fonctions spécialement définies pour le module QuickPi.
Les fonctions et mots clés disponibles sont répertoriés dans des listes déroulantes.
Ensuite, vous écrivez les instructions de votre programme les unes
L'onglet EXPÉRIMENTER est en quelque sotre un "bac à sable". Il vous permet de mener des expérimentations avec les composants et les fonctions disponibles dans l'interface.
Un ou des composants sont mis à votre disposition sur l'interface.
Vous pouvez tester ces composants en cliquant dessus pour changer leur état.
Exemple : cliquer sur une LED pour l'allumer.
Pour exécuter votre programme, cliquez sur le bouton en bas à gauche de l'écran.
N'importe quel programme que vous concevez est exécuté entièrement, avec une simulation visuelle ou auditive du fonctionnement des composants.
Votre mission consiste à concevoir un programme qui permet d'effectuer la tâche demandée dans l'énoncé.
L'onglet VALIDER permet une validation automatique des programmes soumis : grâce à un test, le programme présent dans l'éditeur est automatiquement évalué.
Voici comment fonctionne ce test :
Une ligne du temps (en secondes) est présente pour chaque composant disponible.
Cette ligne du temps apparaît en gris lorsque le composant est activé pendant la période, sinon elle n'apparaît pas.
Au fur et à mesure de l'exécution du programme, un curseur se déplace horizontalement et vérifie que l'état des composants est conforme à ce qui est attendu.
Dans l'exemple, la LED doit être initialement éteinte (état OFF), puis allumée (état ON, ligne grise) entre les instants 0 et 3, puis à nouveau éteinte à l'instant 3.
sleep(milliseconds)
Cette fonction permet de stopper l'exécution du programme pendant une durée entrée en paramètre.
Cette durée est exprimée en millisecondes.
Exemple :
sleep(1000)
Pour stopper l'exécution du programme pendant une durée de 1 seconde.
Un buzzer est un composant qui produit un son lorsqu'il est soumis à un tension électrique.
Un buzzer possède deux états :
Le son peut être toujours le même ou être paramétrable.
Fonctions disponibles :
turnBuzzerOn()
Cette fonction permet d'allumer le buzzer.
turnBuzzerOff()
Cette fonction permet d'éteindre le buzzer.
setBuzzerNote(buzzer, frequency)
Pour le buzzer entré en paramètre, cette fonction permet de produire un son à une fréquence donnée.
La fréquence est exprimée en Hertz.
Exemple :
setBuzzerNote("buzzer1", 264)
permet de jouer la note DO.
Une LED est un composant qui émet de la lumière quand il est parcouru par un courant électrique.
Une LED possède deux états :
ON : le courant traverse la LED, elle est allumée :
OFF : il n'y a pas de courant, la LED est éteinte :
Une LED ne laisse passer le courant électrique que dans un seul sens.
On trouve des LEDs qui émettent de la lumière rouge ou de la lumière verte, ou d'autres couleurs encore.
Fonctions disponibles :
Les fonctions turnLedOn()
et turnLedOff()
permettent respectivement d'allumer et d'éteindre une LED.
Elles ne peuvent servir que lorsqu'il n'y a qu'une seule LED utilisée.
setLedState(led,state)
:
Cette fonction permet d'allumer ou éteindre une LED.
Elle prend en paramètre le nom de la LED et l'état à considérer, True pour l'allumer, False pour l'éteindre.
Exemple :
setLedState("led1",True)
toggleLedState(led)
:
Cette fonction permet d'inverser l'état de la LED entrée en paramètre sous forme de chaine de caractères.
Exemple :
toggleLedState("led1")
Un bouton poussoir est un élément qui possède deux états, relevé et enfoncé.
Fonctions disponibles :
isButtonPressed()
Cette fonction renvoie True
si le bouton est enfoncé, et False
s'il est relevé.
Cette fonction est utilisée seulement lorsqu'il n'y a qu'un seul bouton pressoir sur le montage.
isButtonPressed(button)
Pour le bouton entré en paramètre sous forme de chaine de caractères, cette fonction renvoie True
si le bouton est enfoncé, et False
s'il est relevé.
Exemple :
isButtonPressed("button1")
L'écran de ce module est un petit écran qui permet d'afficher deux lignes de 16 caractères.
Fonctions disponibles
displayText(screen, line1, line2)
Cette fonction permet d'afficher deux lignes de texte sur un écran.
Elle prend en paramètre l'écran à considérer, ainsi qu'une ou deux lignes à afficher, sous forme de chaines de caractères.
Exemple : avec le code
displayText("screen1", "Hello", "World !")
on affiche Hello sur la première ligne, et World ! sur la deuxième ligne de l'écran screen1.
Une manette (stick en anglais) est un ensemble de 5 boutons, chacun correspondant à une direction : haut, droite, bas, gauche ou bien centre.
Il s'agit d'un seul composant, mais qui se programme comme 5 boutons différents :
Par exemple pour tester si la direction haut est enfoncée, on utilise :
buttonState("stick1.up")
Ce capteur permet de mesurer la distance sans contact grâce à un capteur à ultrasons ou à laser. Il a une portée de 3 centimètres à 5 mètres.
Fonctions disponibles :
readDistance(range)
Cette fonction renvoie la distance captée par le capteur de distance entré en paramètre. Cette distance est exprimée en centimètres.
Exemple :
readDistance("range1")
Le Servomoteur est un petit moteur qui peut tourner précisément jusqu'à un angle donné, entre 0 et 180 degrés. On peut l'utiliser pour contrôler la direction des roues d'un petit véhicule, ou pour ouvrir ou fermer une barrière, etc.
Fonctions disponibles :
setServoAngle(servo, angle)
Cette fonction permet de modifier l'angle du servomoteur choisi. L'angle est exprimés en degrés, entre 0 et 180 degrés.
Exemple :
setServoAngle("servo1", 90)`
getServoAngle(servo)
Ce bloc permet de relire l'angle auquel on a réglé le servomoteur choisi. Ce n'est pas un capteur, mais simplement une mémorisation de la dernière valeur modifiée par une instruction.
On peut par exemple l'utiliser pour augmenter l'angle de 1 degré.
Exemple :
setServoAngle("servo1", getServoAngle("servo1") + 1)
Ce document, basé sur du contenu de France-IOI, est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International.
Auteur du document original : Eric Madec de l'académie de Rennes.