logo admiroutes Les automates intelligents
robotique, vie artificielle, réalité virtuelle


information, réflexion, discussion
logo automate © Anne Bedel
Jean-Paul Baquiast Jean-Paul.Baquiast@wanadoo.fr
Christophe Jacquemin christophe.jacquemin@admiroutes.asso.fr

29
Retour au sommaire
Programmer en legOS
(n°3)
La rubrique des passionnés Lego Mindstorms
Brique RCX
par Nanobapt nanobapt@nordnet.fr
http://home.nordnet.fr/%7Emdenayer/
(avec les conseils de Christophe Jacquemin)
21/03/02

Après avoir vu comment créer et compiler nos programmes(1), nous allons voir nos premières commandes sous legOS (NDLR : il est conseillé au lecteur un minimum de base en programmation et langage C. Sinon, il existe de bons bouquins en la matière ou des sites web traitant de la question - par exemple http://www.inf.enst.fr/~charon/CFacile/).

Commandes de Sorties

Les moteurs

Deux commandes sont essentielles pour les moteurs : motor_x_speed(speed) et motor_x_dir(MotorDirection dir). Celles-ci sont définies dans le fichier "dmotor.h".
La première sert à configurer la vitesse du moteur. Il faut y spécifier le x en question, en le remplaçant par a, b ou c ; speed, pour sa part, doit être remplacé par un nombre compris entre 0 à 255 : ceci nous change ainsi du firmware de lego, qui lui ne permettait lui que 8 vitesses différentes.
Speed peut-être aussi remplacé aussi par brake et off : brake permet de stopper net le moteur et off le laisse aller par son inertie.
A noter que les moteurs ne s'allumeront qu'à partir du moment où leurs directions ont été spécifiées par la commande motor_x_dir(MotorDirection dir).
Comme précédemment, le terme x doit être remplacé par a, b ou c. Et MotorDirection dir par la direction de votre choix, c'est-à-dire : fwd (forward, avant) ou rev (reserve, arrière). Voici un exemple qui devrait vous permettre de mieux comprendre.

/*moteur.c*/

#include <unistd.h>
#include <dmotor.h>

int main()

{
int i ;

motor_a_dir(fwd);
motor_c_dir(fwd);

motor_a_speed(MAX_SPEED);
motor_c_speed(MAX_SPEED);

for( i = MAX_SPEED; i >= 0; i--)

{

motor_a_speed(i); motor_c_speed(i);

lcd_int(i);

msleep(20);
}


motor_a_speed(brake);
motor_c_speed(off);
sleep(5);
}



//déclaration des bibliothèques(2)

 

 

 

//sens des moteurs


//vitesse des moteurs

 


/*vitesse des moteurs par rapport a i*/

 

/*fonction qui affiche la vitesse ; plus de détails plus tard*/

/*attend 20 ms(plus de détails plus tard)*/

 

/*toucher les moteurs pour voir la différence*/

Voici donc un exemple d'utilisation des moteurs. On peut remarquer la présence de MAX_SPEED déclaré dans dmotor.h, et dont la valeur est réglée à 255 par défaut.

Le LCD
L'une des autres caractéristique de legOS est que l'on peut écrire sur le LCD (écran de la brique RCX). C'est très utile quand on veut debugger un programme écrit en legOS.
Voici donc quelque fonction déclarées dans la librairie dlcd.h (votre programme doit donc contenir #include <dlcd.h>)

Voilà se qu'il faut savoir sur les moteurs et le LCD. D'autres fonctions sont disponibles. A vous de les retrouver dans les librairies.

Dans le prochain numéro, nous aborderons la programmation des capteurs ...


(1) Cf http://www.automatesintelligents.com/labo/2002/fev/legos.html et http://www.automatesintelligents.com/labo/2002/mar/legos.html Remonter d'où l'on vient
(2)
Pour le non connaisseur : les caractères comme  //  et /* commentaire */ permettent de faire un commentaire sur le programme. On note que le premier n'est utilisable que pour une seule ligne : // coucou ; le second pour plusieurs lignes : /*coucou, ........................................................................................................................................comment ca va ?*/
On note aussi que ces méthodes d'utilisation de commentaire, si elles sont mal écrites, renvoient un parse error (ou autre). Exemples :
// coucou ca va ?
// coucou ca va */
/* commentaire 1*/ nous ne sommes plus dans un commentaire */

On pourrait aussi, pour chaque expression du programme, expliquer à quoi elles correspondent : par exemple, l'opérateur # signifie la déclaration de bibliothèque ou de constante
#include <stdio.h>  // va inclure le fichier (qui se trouve dans le répertoire include par défaut)
//dans le programme ainsi certaines commandes seront accessibles

#include "monfichier" /* va inclure le fichier "monfichier" dans le répertoire où se trouve le le programme */

#define CONST 20 /* va définir la constante CONST à 20,tous les mots CONST dans le programme seront remplacés par 20*/

Cela dit, je ne vais pas détailler à chaque fois ce que chaque ligne veut dire : je partirai du principe que le lecteur à des notions de programmation en langage C Remonter d'où l'on vient


Retour au sommaire