NXT Sensors Overview

From ROBOTC API Guide
Jump to: navigation, search
NXT → Sensors Overview


For ROBOTC NXT Sensor functions, check out the NXT Sensor Functions page!

For information and examples on using I2C sensors, head over to NXT I2C Digital Sensors page!



Touch Sensor

The NXT Touch Sensor has 2 states, pressed or unpressed. In code this is represented with a 1 for pressed, and a 0 for unpressed. There are no other states for this sensor. Below is a simple program that keeps your program from running until you press the Touch Sensor.
#pragma config(Sensor, S1,     touchSensor,         sensorTouch)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//
 
task main()
{
  while(SensorValue(touchSensor) == 0)  // while the Touch Sensor is inactive (hasn't been pressed):
  {
    // DO NOTHING (wait for press)
  }
  while(SensorValue(touchSensor) == 1)  // while the Touch Sensor is active (pressed):
  {
    // DO NOTHING (wait for release)
  }
 
  // YOUR CODE GOES HERE
                                        // otherwise (the touch sensor has been activated [pressed] ):
  motor[motorB] = 75;                   /* run motors B and C forwards */
  motor[motorC] = 75;                   /* with a power level of 75    */
  wait1Msec(1000);                      // wait 1000 milliseconds (1 second) before moving to further code
}


Light Sensor

The NXT Light Sensor has a range of states between 0 and 100. The lower the number, the darker the reading is. The higher the number, the lighter the reading is. Below is a simple line-following program that uses only one NXT Light Sensor.
#pragma config(Sensor, S3,     lightSensor,         sensorLightActive)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//
 
task main()
{
   wait1Msec(50);                        // The program waits 50 milliseconds to initialize the light sensor.
   while(true)                           // Infinite loop
   {
      if(SensorValue(lightSensor) < 45)  // If the Light Sensor reads a value less than 45:
      {
        motor[motorB] = 60;                  // Motor B is run at a 60 power level.
        motor[motorC] = 20;                  // Motor C is run at a 20 power level.
      }
      else                               // If the Light Sensor reads a value greater than or equal to 45:
      {
        motor[motorB] = 20;                  // Motor B is run at a 20 power level.
        motor[motorC] = 60;                  // Motor C is run at a 60 power level.
      }
   }
}


Sound Sensor

The NXT Sound Sensor has a range of states between 0 and 100. The lower the number, the quieter the reading is. The higher the number, the louder the reading is. Below is a simple program that maps the Sound Sensor reading to the motor speeds.
#pragma config(Sensor, S2,     soundSensor,         sensorSoundDB)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//
 
task main()
{
  wait1Msec(1000);       // A one-second wait is required to cleanly initialize the Sound Sensor.
  while(true)            // Infinite loop
  {
    motor[motorB] = SensorValue[soundSensor];    /* Motors B and C are run at a power level equal */
    motor[motorC] = SensorValue[soundSensor];    /* to the value read in by the Sound Sensor.     */
  }
}


Ultrasonic (sonar) Sensor

The NXT Ultrasonic Sensor has a range of states between 0 and 255. This number is representative of the current reading in centimeters. However, a reading of 255 means that the current sensor reading is out of range. This is a "range error" and means that the echo is not being read back (looking down a long hall for example). A reading outside of these numbers indicates that there is no sensor attached or some error with the connection.
#pragma config(Sensor, S4,     sonarSensor,         sensorSONAR)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//
 
task main()
{
  int distance_in_cm = 20;   // Create variable 'distance_in_cm' and initialize it to 20(cm).
  while(SensorValue[sonarSensor] > distance_in_cm)   /* While the Sonar Sensor readings are greater */
  }                                                  /* than the specified, 'distance_in_cm':       */
    motor[motorB] = 75;                     // Motor B is run at a 75 power level
    motor[motorC] = 75;                     // Motor C is run at a 75 power level
  }
  motor[motorB] = 75;    // Motor B is stopped at a 0 power level
  motor[motorC] = 75;    // Motor C is stopped at a 0 power level
}