Modes et types des capteurs
La fonction SetSensor() que nous avons vu avant fait actuellement deux choses : il défini le type de capteurs et défini le mode dans lequel le capteur opère. En configurant le mode et le type du capteur séparément, on peut contrôler le comportement du capteur avec plus de précision, ce qui est très pratique pour certaines applications.
Le type du capteur est défini grâce à la fonction SetSensorType(). Il y a beaucoup de types différents, mais on va voir les principaux : SENSOR_TYPE_TOUCH, le capteur tactile,SENSOR_TYPE_LIGHT_ACTIVE, le capteur de couleur ( avec les DELs allumées ), SENSOR_TYPE_SOUND_DB, le capteur sonore et SENSOR_TYPE_LOWSPEED_9V, le capteur à ultrasons. Définir le type de capteur est particulièrement important pour indiquer si le capteur à besoin d'énergie ( pour allumer les DELs du capteur de couleur par exemple ), ou pour indiquer au NXT que le capteur est digital et à besoin d'être lu via le protocole IC en série. C'est possible d'utiliser les vieux capteur RCX avec le NXT : SENSOR_TYPE_TEMPERATURE, pour le capteur de température, SENSOR_TYPE_LIGHT pour le vieux capteur de couleur, SENSOR_TYPE_ROTATION pour le capteur RCX de rotation ( on en parlera plus tard ).
Le mode du capteur est défini grâce à la fonction SetSensorMode(). Il y a huit différents modes. Le plus important est SENSOR_MODE_RAW. Dans ce mode, la valeur que vous recevez du capteur est un nombre entre 0 et 1023. C'est la valeur brut produite par le capteur. La signification dépend du capteur. Par exemple, pour un capteur tactile, quand le capteur n'est pas enfoncé, la valeur est proche de 1023. Quand il est complètement enfoncé, la valeur est proche de 50. Quand il est partiellement enfoncé, la valeur est entre 50 et 1000. Donc si vous définissez le mode RAW, vous pouvez savoir s'il est partiellement enfoncé. Avec le capteur de couleur, la valeur varie entre 300 ( beaucoup de lumière ) et 800 ( très sombre ). Cela donne une valeur plus précise que d'utiliser la fonction SetSensor(). Pour plus de détail, regardez le guide de programmation NXC.
Le deuxième mode est SENSOR_MODE_BOOL. Avec ce mode, la valeur retournée est 0 ou 1. Quand la valeur du mode RAW est en dessous de 562 la valeur est 0, sinon la valeur est 1.SENSOR_MODE_BOOL est la valeur par défaut du capteur tactile, mais il peut être utilisé pour d'autres capteurs qui renvoient des valeurs analogiques. Les modesSENSOR_MODE_CELCIUS et SENSOR_MODE_FAHRENHEIT ne sont utiles qu'avec les capteurs de températures. SENSOR_MODE_PERCENT convertit la valeur brut en une valeur comprise entre 0 et 100. SENSOR_MODE_PERCENT est le mode par défaut du capteur de couleur. SENSOR_MODE_ROTATION n'est utilisé qu'avec le capteur de rotation.
Il y a deux autres modes intéressants : SENSOR_MODE_PULSE'>SENSOR_MODE_EDGE et SENSOR_MODE_PULSE. Ils comptent le nombre de transitions entre une valeur faible et une valeur élevée ou opposée. Par exemple, quand on touche un capteur tactile, cela cause une transition d'une valeur haute à une valeur basse. Quand on le relâche, cela crée une autre transition. Quand vous définissez le mode à SENSOR_MODE_PULSE, seules les transition de faibles à élevées sont comptées. Donc chaque pression et relâchement comptent pour une seule fois. Quand vous définissez le mode à SENSOR_MODE_EDGE, chaque transitions sont comptées. Donc chaque pression et relâchement comptent pour deux fois. Quand vous comptez les pressions ou impulsions, vous devez reinitialiser les compteurs à 0. Vous pouvez le faire grâce à la fonction ClearSensor(), vous réinitialisez le compteur indiqué à 0.
Regardons un exemple. Le programme suivant utilise le capteur tactile pour diriger le robot. Connectez le capteur tactile avec un long câble à l'entrée une. Si vous pressez deux fois, le robot recule. Si vous le pressez une fois, il s'arrête de bouger.
task main()
{
SetSensorType(IN_1, SENSOR_TYPE_TOUCH);
SetSensorMode(IN_1, SENSOR_MODE_PULSE);
while(true)
{
ClearSensor(IN_1);
until (SENSOR_1 > 0);
Wait(500);
if (SENSOR_1 == 1) {Off(OUT_AC);}
if (SENSOR_1 == 2) {OnFwd(OUT_AC, 75);}
}
}
Notez que nous commençons par définir le type et ensuite le mode. C'est essentiel car changer le type affecte le mode.
Dostları ilə paylaş: |