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

30
Retour au sommaire
Programmer en legOS
(n°4)
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)
11/04/02

Après avoir vu comment contrôler les moteurs de votre robot (mouvement), passons maintenant à l'utilisation des capteurs sous legOS (interaction du robot avec son environnement)
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/.

Sachez tout d'abord qu'il existe 2 types de capteurs pour le RCX : les capteurs passifs et les actifs.
Le premier type concerne le fonctionnement des capteurs tactiles et de température, le deuxième celui des capteurs de lumières et de rotation. Selon le capteur utilisé, il faudra donc déclarer son type au début de votre programme à l'aide de la fonction ds_active(&SENSOR_X) pour activer le capteur, et ds_passive(&SENSOR_X) pour rendre passif votre capteur.

Il faut aussi savoir qu'il existe plusieurs façons de récupérer les valeurs des capteurs.
Parlons ainsi tout d'abord du mode RAW qui est la valeur brute du capteur. On peut y accéder avec les variables (inaccessible en écriture) SENSOR_X ou X doit être remplacé par le numéro de capteur dont on veut avoir la valeur brute.
Reconnaissons que cette méthode n'est pas vraiment la plus intuitive pour l'intégrer dans son programme (mais elle peut être une bonne solution dans certains cas). Il existe donc d'autres variable qui vous renvoient ce que le firmware de lego aurait donné : la variable LIGHT_X, par exemple, renvoie la valeur du capteur de lumière en pourcentage. On notera aussi la présence de la variable TOUCH_X qui renvoie 1 ou 0 selon l 'état du capteur tactile.

Pour le capteur de rotation, c'est un peut plus compliqué(1). En effet, ce capteur est un capteur actif - il faudra donc le programmer en conséquence - mais il présente aussi des fonctions que les autres capteurs n'ont pas. On retiendra donc ces quelques fonctions pour l'utiliser :

Après ces quelques déclarations on pourra utiliser la variable ROTATION_X pour avoir la valeur renvoyée par le capteur de rotation.

* * * * * * * * * * * * *

Terminons ici sur un petit exemple de programmation de capteur de lumière qui, je pense, s'avérera intéressant pour la programmation des autres capteurs.

/*sensor.c*/

#include <dsensor.h>
#include <dlcd.h>
#include <conio.h>
#include <dmotor.h>

int main()

{
ds_active(&SENSOR_1);

while(1)


{
if(LIGHT_1 < 30)

{
motor_a_dir(fwd);

motor_a_speed(255);
motor_c_speed(brake);
}

else
{
motor_c_dir(fwd);

motor_a_speed(brake);
motor_c_speed(255);
}

}

}

 

//déclaration des bibliothèques

 

 


//ceci place le capteur 1 en mode actif

 

 


//si une ligne noire est trouvée

 

 


 

//sinon

 

 




Suite au prochain numéro, où nous aborderons le multitâche...

(1) Notons que je n'ai jamais encore testé la programmation de capteur de rotation : je ne garantis donc pas la véracité de ces informations. Celles-ci m'ont été données sur internet Remonter d'où l'on vient

Retour au sommaire