Cours:StartMindstormEV3DEV
Révision datée du 9 octobre 2017 à 10:28 par Bjacquot (discussion | contributions)
Sommaire
Infos utiles
librairie brick
Pour commencer, nous utiliserons la librairie simplifiée "brick.h" dont nous allons explorer quelques aspects ici.
- on trouve une description globale des différentes approches de la librairie
- il faudra nécessairement se référer à la documentation de la librairie brick
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 :
| |||||||||
| 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