NXC: Manejo de sensores

A diferencia de los motores, los sensores podemos conectarlos en cualquiera de los 4 puertos de entrada (IN) que tenemos en nuestro brick. Es por esto que lo primero que debemos hacer es configurar qué sensor tiene cada puerto, para luego utilizar sólo una orden para conocer los valores que el mismo va obteniendo.

La sintaxis sería: FijarSensor_____(EN QUE PUERTO)

Por ejemplo, configuramos (Set) un sensor de tacto (SensorTouch) en el puerto de entrada 1 (IN_1)

En el lenguaje del programa quedaría:

SetSensorTouch(IN_1);

Con sólo esta línea, podremos realizar acciones utilizando el sensor de tacto (pulsador) que está conectado en el puerto 1, simplemente utilizando la orden SENSOR_1 en cualquier parte del programa.

Ejemplo práctico: Cada vez que presionemos el pulsador que está en el puerto 1, el motor conectado en el puerto B girará 15º.

task main(){
     SetSensorTouch(IN_1);
     while(true){
          if (SENSOR_1 == 1) {
               RotateMotor(OUT_B, 100, 15);
          }
     }
}

 

En la próxima sección veremos el uso de comandos para bucles, lógicos y de repetición finita o condicional.

 

Cómo fijar el resto de los sensores:

SetSensorLight → Luz/Grises

SetSensorSound → Sonido

SetSensorUtrasonic → Distancia/Ultrasonido

 

Para leer la intensidad de la luz ambiente con su led apagado, configura el sensor de la siguiente manera:

SetSensorType(IN_3, IN_TYPE_LIGHT_INACTIVE);
SetSensorMode(IN_3, IN_MODE_PCTFULLSCALE);
ResetSensor(IN_3);

Con respecto al sensor de distancia, a la hora de trabajar con él dentro de una comparación, deberemos especificar SensorUS(IN_4) en vez de SENSOR_4 para que nos transforme el valor obtenido en datos fáciles de manejar para el programador.

Pongamos otro ejemplo: deseamos que nuestro robot se detenga cuando tenga un obstáculo a menos de 40 cms. El mismo está configurado de la siguiente manera: Motores en B y C, Sensor de Distancia en puerto 4.

El programa podría quedar de la siguiente manera:

task main(){
     OnFwd(OUT_BC, 60);
     SetSensorUltrasonic(IN_4);
     while(true){
          if (SensorUS(IN_4) < 40) {
               Off(OUT_BC);
          }
     }
}