NXT Sensors Overview
From ROBOTC API Guide
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 } |