Cours:MindstormStructuresDeControle : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m ({{Vert|faire ... tant que}})
m (Travail à faire)
Ligne 198 : Ligne 198 :
  
 
====Travail à faire====
 
====Travail à faire====
Faire moyenne des capteurs de couleur jusqu'à ce que le
+
Faire moyenne des capteurs de couleur jusqu'à ce que {{Rouge|touch sensor}} détecte un obstacle.
  
 
={{Rouge|}}=
 
={{Rouge|}}=
  
 
={{Rouge|}}=
 
={{Rouge|}}=

Version du 15 septembre 2018 à 20: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.

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;
   ...

Question.jpg Modifier votre programme pour qu'il affiche le prix avant et après réduction.


Question.jpg Faire un programme qui :

  • 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.

Todo.jpg 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.

Question.jpg 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 :

  1. vous savez d'avance combien de fois vous voulez répéter la boucle
  2. 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.

répéter x fois

Nous sommes typiquement dans le cas où on connaît le nombre de boucles que l'on veut faire. C'est x. Pour être précis, le nombre en question peut être dans une variable.

  • je connais le nombre et je l'écris directement
int i;
...
for (i=0;i<5;i++) {
  // faire quelque chose 5 fois
}
...
  • je sais que le nombre est dans une variable
int i,j;
...
j=10;
...
for (i=0;i<j;i++) {
  // faire quelque chose 10 fois
}
...

Travail à faire

Réaliser la moyenne de 5 lectures du capteur de couleurs.

faire ... tant que

L'écriture est la suivante :

...
do {
  // faire quelque chose plusieurs fois jusqu'à condition fausse.
} while( condition fausse );

Travail à faire

Faire moyenne des capteurs de couleur jusqu'à ce que touch sensor détecte un obstacle.