Cours:StartMindstormEV3DEV : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
({{Bleu|moteur de type "tacho"}})
Ligne 153 : Ligne 153 :
 
</source>
 
</source>
  
Remarquons :
+
<big>'''Remarquons'''</big> :
 
* si on souhaite utiliser la même commande sur plusieurs moteur, on écrira par ex :
 
* si on souhaite utiliser la même commande sur plusieurs moteur, on écrira par ex :
 
**OUTA | OUTB | OUTC
 
**OUTA | OUTB | OUTC
Ligne 159 : Ligne 159 :
 
*{{Rouge|tacho_is_plugged}} : permet de vérifier la présence d'un (ou plusieurs) moteur tacho
 
*{{Rouge|tacho_is_plugged}} : permet de vérifier la présence d'un (ou plusieurs) moteur tacho
 
*{{Rouge|tacho_get_max_speed}} : récupère la vitesse maximum d'un moteur
 
*{{Rouge|tacho_get_max_speed}} : récupère la vitesse maximum d'un moteur
 +
 +
On pourra alors utiliser les moteurs par exemple de la façon suivante (toujours à placer dans le main bien entendu !) :
 +
<source lang=c>
 +
  if ( initMoteurs()==0 )
 +
  {
 +
      ev3_uninit();
 +
      return(-1);
 +
  }
 +
  int i;
 +
  for (i=0;i<10;i++)
 +
  {
 +
      tacho_set_speed_sp( moteurGauche|moteurDroit,  100);
 +
      tacho_run_forever( moteurGauche|moteurDroit );
 +
      Sleep(2000);
 +
      tacho_stop(moteurDroit|moteurGauche);
 +
      Sleep(200);
 +
      tacho_set_speed_sp( moteurGauche,  -100);
 +
      tacho_set_speed_sp( moteurDroit ,  100);
 +
      tacho_run_forever( moteurGauche|moteurDroit );
 +
      Sleep(1000);
 +
      tacho_stop(moteurDroit|moteurGauche);
 +
      Sleep(200);
 +
  }
 +
  tacho_stop(moteurDroit|moteurGauche);
 +
</source>

Version du 9 octobre 2017 à 10:29

Infos utiles

librairie brick

Pour commencer, nous utiliserons la librairie simplifiée "brick.h" dont nous allons explorer quelques aspects ici.

Programme minimum

Cette base minimum de programme devra être reprise systématiquement :

#include <stdio.h>
#include "brick.h"
#include <unistd.h>
#define Sleep( msec ) usleep(( msec ) * 1000 )

int main( void )
{
   if ( ev3_init() == -1 )
   {
     printf("\erreur d'initialisation\n");
     return ( 1 );
   }
   printf("initialisation des capteurs ... ");
   ev3_sensor_init();
   printf(" ok !\n");
   printf("initialisation des actionneurs ... ");
   while ( ev3_tacho_init() < 1 ) Sleep( 1000 );
   printf(" ok !\n");

   // début du programme


   // fin du programme
   ev3_uninit();
   printf("*** ( EV3 ) Bye! ***\n" );
   return(0);
}

Pour compiler et exécuter votre programme test.c , il suffit de :

gcc test.c -lev3dev-c -o test
./test

Capteurs

http://slideplayer.com/slide/10944320/

Capteur de couleur

On trouve 3 modes de mesure principaux :

COL-COLOR retourne un nombre entre 0 et 7 tel que :
0 ?? 1 noir 2 bleu
3 vert 4 jaune 5 rouge
6 blanc 7 marron
COL-REFLECT intensité de la lumière réfléchie entre 0 et 100
COL-AMBIENT intensité de la lumière ambiante entre 0 et 100

Il faudra tout d'abord initialiser le capteur et choisir le mode de mesure :

POOL_T capteurCouleur;
 
const char const *nomCouleur[] = { "?", "BLACK", "BLUE", "GREEN", "YELLOW", "RED", "WHITE", "BROWN" };
#define NB_COULEUR  (( int )( sizeof( nomCouleur ) / sizeof( nomCouleur[ 0 ])))
int couleur;
 
int initCapteurCouleur()
{
   capteurCouleur = sensor_search( LEGO_EV3_COLOR );
   if (capteurCouleur)
   {
       color_set_mode_col_color(capteurCouleur);
       //color_set_mode_col_reflect(capteurCouleur);
       //color_set_mode_col_ambient(capteurCouleur);
       printf( "capteur couleur connecté\n");
   }
   else
   {
       printf("vérifier le branchement du capteur couleur !\n");
       return (0);
   }
   return 1;
}

On utilisera ensuite le capteur par exemple de la façon suivante (à placer dans le main !!) :

   // début du programme
   if ( initCapteurCouleur()==0 )
   {
       ev3_uninit();
       return(-1);
   }
   int i;
   for (i=0;i<100;i++)
   {
       couleur=sensor_get_value0(capteurCouleur,0);
       if ( (couleur>=NB_COULEUR) || (couleur<0) )
       {
           printf("problème, couleur inconnue !");
       }
       else
       {
           printf("couleur n°:%d : %s\n",couleur,nomCouleur[couleur]);
       }
       Sleep(200);
   }
   // fin du programme

Actionneur

moteur de type "tacho"

On pensera bien évidemment à initialiser les moteurs :

#define moteurGauche   OUTC
#define moteurDroit    OUTB
int maxSpeedMoteurDroit;
int maxSpeedMoteurGauche;

int initMoteurs()
{
   if (tacho_is_plugged( moteurGauche|moteurDroit , TACHO_TYPE__NONE_ ))
   {
       maxSpeedMoteurDroit  = tacho_get_max_speed( moteurDroit, 0 );
       maxSpeedMoteurGauche = tacho_get_max_speed( moteurGauche, 0 );
       printf("moteurs trouvés, vitesses max : %d-%d\n",maxSpeedMoteurGauche,maxSpeedMoteurDroit);
   }
   else
   {
       printf("Attention, il faut brancher les moteurs !\n");
       printf("et au bon endroit !!!\n");
       return (0);
   }
   return 1;
}

Remarquons :

  • si on souhaite utiliser la même commande sur plusieurs moteur, on écrira par ex :
    • OUTA | OUTB | OUTC
    • moteurGauche | moteurDroit , si on a fait une association de moteur* avec OUT?
  • tacho_is_plugged : permet de vérifier la présence d'un (ou plusieurs) moteur tacho
  • tacho_get_max_speed : récupère la vitesse maximum d'un moteur

On pourra alors utiliser les moteurs par exemple de la façon suivante (toujours à placer dans le main bien entendu !) :

   if ( initMoteurs()==0 )
   {
       ev3_uninit();
       return(-1);
   }
   int i;
   for (i=0;i<10;i++)
   {
       tacho_set_speed_sp( moteurGauche|moteurDroit,  100);
       tacho_run_forever( moteurGauche|moteurDroit );
       Sleep(2000);
       tacho_stop(moteurDroit|moteurGauche);
       Sleep(200);
       tacho_set_speed_sp( moteurGauche,  -100);
       tacho_set_speed_sp( moteurDroit ,   100);
       tacho_run_forever( moteurGauche|moteurDroit );
       Sleep(1000);
       tacho_stop(moteurDroit|moteurGauche);
       Sleep(200);
   }
   tacho_stop(moteurDroit|moteurGauche);