Utilisation des capteurs

Jeudi 26 janvier 2006, par Pierre Couillard // NQC : Not Quite C

Nous allons continuer notre apprentissage sur NQC. Nous savons comment activer nos moteurs (lire cet article) et maintenant nous verrons comment utiliser un capteur.

L’utilisation de capteur est absolument nécessaire afin de faire un robot considéré comme “intelligent” (pouvant réagir à une action). Nous verrons donc ici comment définir un capteur, comment définir son mode.

Il faut d’abord définir un capteur : on utilise la commande

SetSensor(SENSOR_X , SENSOR_TYPE)

où X est le n° du port sur lequel est connecté le capteur et type le type du capteur : soit LIGHT (lumière), TOUCH (contact), TEMPERATURE et ROTATION. Une fois le capteur déclaré, on peut l’utiliser dans son mode par défaut, mais on peut aussi choisir des modes bien plus intéressants. Ces modes sont au nombres de huit.

On choisit le mode à l’aide de la commande

SetSensorMode(SENSOR_X , SENSOR_MODE_... )

SENSOR_X est le n° du port où est connecté le capteur et SENSOR_MODE_... l’un des huit modes que nous allons expliquer ci-dessous. Commençons par le SENSOR_MODE_RAW ce mode est une variable qui peut prendre une valeur de 0 à 1023. Ce mode est intéressant uniquement si vous avez besoin de savoir précisément comment votre capteur de contact est enfoncé. ( et encore, ce n’est pas précis : on passe directement de 50 à 950 donc...)

Passons donc au SENSOR_MODE_BOOL : celui là, comme son nom l’indique, peut prendre comme valeur uniquement 0 ou 1. C’est le mode de défaut pour le capteur de contact.

Vient ensuite le SENSOR_MODE_PERCENT, c’est le mode de défaut du capteur de lumière. Il peut prendre une valeur de 0 à 100.

Traitons maintenant des deux modes pour le capteur de température : SENSOR_MODE_CELSIUS et SENSOR_MODE_FAHRENHEIT. Nous ne développerons pas ces deux modes, leurs noms vous donnent clairement ce qu’ils signifient.

Il existe aussi le mode SENSOR_MODE_ROTATION mais comme les modes précédents, nous ne développerons pas pour la même raison.

Par la suite, les deux modes les plus intéressants : le SENSOR_MODE_EDGE et le SENSOR_MODE_PULSE. Ces deux modes au contraire des autres ne sont pas instantanés. En effet, le premier compte 1 à chaque fois qu’il passe d’un état élevé ou bas à un état contraire. Le second ne compte que le passage d’un état bas vers un état haut. Par exemple, on prend un capteur de contact. On l’enfonce puis on le relâche. Le premier mode va compter 2 le second 1. Mais pour ce type de mode, il faut pouvoir remettre le capteur à zéro. On utilise donc la commande ClearSensor( ) avec entre parenthèse le capteur voulu.

Ceci fait un résumé des capteurs qu’on peut retrouver sur notre brique et qu’on désire gérer avec le langage NQC.

Exemple de programme

Voici quelques explications complémentaires. Comme vous l’avez remarqué, nous avons utilisé une boucle conditionnelle. L’utilisation de while nous permet de dire au robot d’exécuter une action tant que la condition est vraie (par exemple, ici les moteurs fonctionnent tant qu’il n’y a pas de contact). L’expression until permettra d’actionner ce qui se passe lorsque la condition entre parenthèses se réalise (ici, le contact du capteur est enfoncé). Ce qui suivra dans votre programme sera ce que vous désirez que le robot réalise lorsque cette condition se réalise.

Voilà. Faites des modifications et utilisez différents capteurs afin de vous familiariser avec le commandes contrôlant ceux-ci.