Cours:MindstormStructuresDeControle : Différence entre versions
m (→{{Bleu|Structure de répétition}}) |
m (→{{Bleu|Structure de répétition}}) |
||
Ligne 156 : | Ligne 156 : | ||
=={{Bleu|Structure de répétition}}== | =={{Bleu|Structure de répétition}}== | ||
− | La structure de répétition en informatique s'appelle une boucle. {{Rouge|'''La boucle est le seul moyen de remonter vers le début (plutôt vers le haut) d'un programme !'''}} | + | La structure de répétition en informatique s'appelle une boucle. {{Rouge|'''La boucle est le seul moyen de remonter vers le début (plutôt vers le haut) d'un programme !'''}} La boucle permet donc de refaire les choses plusieurs fois. |
+ | |||
+ | Lorsque vous désirez faire les choses plusieurs fois vous êtes dans deux situations différentes qui appellent une solution différente : | ||
+ | # vous savez d'avance combien de fois vous voulez répéter la boucle | ||
+ | # vous ne savez pas combien de fois vous voulez exécuter la boucle mais vous connaissez une condition ('''booléenne''') à son arrêt | ||
+ | Nous allons traiter ces deux situations maintenant les unes après les autres. | ||
==={{Vert|répéter x fois}}=== | ==={{Vert|répéter x fois}}=== |
Version du 15 septembre 2018 à 19:01
Retour à la liste des Tps
Vous trouverez sur la page listant les énoncés de TP un lien vers l'ensemble des fonctions spécifique à la programmation de la brique lego EV3.
Sommaire
Travail préparatoire : affichage de variable
Nous avons vu comment déclarer et donner une valeur à une variable de type entier dans le 1er TP, exemple :
int a = 5;
Il est intéressant d'afficher sa valeur avec la fonction LcdPrintf. Pour cela, on prépare le texte souhaité, et on place %d dans la chaîne de caractère (délimitée par des " ") à l'endroit où on souhaite afficher la valeur de la variable. On ajoute ensuite un paramètre dans l'appel de fonction.
Bon c'est plus simple avec un exemple :
#include <ev3.h>
int main(void)
{
// on déclare une variable prix
int prix = 100;
InitEV3();
LcdPrintf(1, "le produit coute %d euros\n", prix);
Wait(SEC_5);
FreeEV3();
return 0;
}
On peut afficher la valeur de plusieurs variables en ajoutant des %d :
#include <ev3.h>
int main(void)
{
// on déclare 2 variables prixDepart et redution
int prixDepart = 100;
int reduction = 10;
InitEV3();
LcdPrintf(1, "le produit coute %d euros avant reduction, la remise est de %d euros\n", prixDepart, reduction);
Wait(SEC_5);
FreeEV3();
return 0;
}
On peut bien sûr effectuer des opérations sur les variables , par exemple :
...
int prixDepart = 100;
int reduction = 10;
// on n'affecte pas de valeur, on va la calculer par la suite
int prixFinal;
// modification de la valeur de la variable prixFinal :
prixFinal = prixDepart - reduction;
...
Modifier votre programme pour qu'il affiche le prix avant et après réduction.
- déclare 2 variables :
- a de valeur 5
- b de valeur 6
- calcul le produit et met le résultat dans une variable resultat
- affiche le calcul effectué et le résultat
Affichage de l'état d'un capteur
Tout système possède des entrées et des sorties.
Les sorties sont les actionneurs et génèrent donc une action :
- produire un son
- émettre de la lumière
- produire une action mécanique
- ...
Les entrées permettent d’interagir avec l'environnement et l'utilisateur, ils observent/mesurent quelque chose :
- capteur de contact/collision
- microphone
- capteur de couleur
- ...
Sur la brique programmable EV3, le nom des connecteurs donne la fonction :
- 1 2 3 4 : ce sont les entrées
- A B C D : ce sont les sorties
Principe pour 1 capteur
Les capteurs pouvant être connectés sur la brique EV3 étant tous différents, il est nécessaire d'indiquer sur quelle broche nous avons connecté le/les capteur(s) utilisé(s).
Pour cela vous devez utilisez la fonction :
setAllSensorMode
Le détail de cette fonction sera à consulter dans la documentation.
Voici un exemple d'utilisation à suivre pour tester le capteur de contact ( touch sensor in English !) :
#include <ev3.h>
int main(void)
{
// on déclare une variable etatTouchSensor pour "enregistrer" l'état du capteur
int etatTouchSensor = 0;
InitEV3();
// on configure la sortie 1 comme capteur de contact
// et les sorties 2,3,4 sont indiquées sans capteur (NO_SEN)
setAllSensorMode(TOUCH_PRESS, NO_SEN, NO_SEN, NO_SEN);
// on peut alors lire l'état du capteur sur l'entrée 1
// et mettre sa valeur dans la variable etatTouchSensor
etatTouchSensor = readSensor( IN_1 );
// on affiche alors sa valeur
LcdPrintf(1, "valeur du capteur : %d \n", etatTouchSensor);
Wait(SEC_5);
FreeEV3();
return 0;
}
A vous
Vous voici près à lire l'état des différents capteurs.
En vous servant du tableau avec la liste des entrées sur la page des énoncés, modifier votre programme pour observer l'état des différents capteurs
Remarque :
- Pensez à changer le nom de la variable en fonction du nom du capteur
- Vous pouvez bien sûr lire l'état de tous les capteurs dans le même programme
- Vous pouvez lire plusieurs fois l'état du même capteur dans votre programme :
...
etatTouchSensor = readSensor( IN_1 );
LcdPrintf(1, "valeur du capteur : %d \n", etatTouchSensor);
Wait(SEC_5);
// on recommence :
etatTouchSensor = readSensor( IN_1 );
LcdPrintf(1, "valeur du capteur : %d \n", etatTouchSensor);
Wait(SEC_5);
// on recommence :
etatTouchSensor = readSensor( IN_1 );
LcdPrintf(1, "valeur du capteur : %d \n", etatTouchSensor);
Wait(SEC_5);
// on recommence :
...
Structure de répétition
La structure de répétition en informatique s'appelle une boucle. La boucle est le seul moyen de remonter vers le début (plutôt vers le haut) d'un programme ! La boucle permet donc de refaire les choses plusieurs fois.
Lorsque vous désirez faire les choses plusieurs fois vous êtes dans deux situations différentes qui appellent une solution différente :
- vous savez d'avance combien de fois vous voulez répéter la boucle
- vous ne savez pas combien de fois vous voulez exécuter la boucle mais vous connaissez une condition (booléenne) à son arrêt
Nous allons traiter ces deux situations maintenant les unes après les autres.