/***
* TinyEdgeFollower
* is a LeJOS robot that follows the edge of a black/white line.
*
* This code is a stripped-down version of what's in
* the JimsRobot directory, to show that there's more than one way
* to do it, and to give you an example of a less object-oriented style.
*
* To use it
* You'll need a robot with 2 motors (on ports A,B)
* and one light sensor (on port S3).
* Compile and download the code as usual:
* lejosc TinyEdgeFollower.java
* The turn on lego brick, aim at IR tower.
* lejos TinyEdgeFollower
*
* Put the robot over the white color, and push "Run".
* When it beeps, move it to the black color.
* It should then follow the border.
*
* @version 1.0 Oct 25 2002
* @author Jim Mahoney
*
****/
import josx.platform.rcx.*;
class TinyEdgeFollower {
public static int whiteValue;
public static int blackValue;
public static void main(String[] args) throws Exception {
initialize();
TextLCD.print("Wh");
Thread.sleep(1000);
whiteValue = Sensor.S3.readValue(); // define white value.
Sound.beep();
TextLCD.print("Bl");
Thread.sleep(2000);
blackValue = Sensor.S3.readValue(); // define black value.
Sound.beep();
TextLCD.print("--");
while (true){
int howFarFromWhite = Math.abs(Sensor.S3.readValue()-whiteValue);
int howFarFromBlack = Math.abs(Sensor.S3.readValue()-blackValue);
if ( howFarFromWhite < howFarFromBlack ){
Motor.A.backward();
Motor.B.stop();
}
else {
Motor.A.stop();
Motor.B.forward();
}
Thread.sleep(50); // to avoid too much jiggling.
} // end while
} // end main
public static void initialize(){
Sensor.S3.setTypeAndMode(SensorConstants.SENSOR_TYPE_LIGHT,
SensorConstants.SENSOR_MODE_PCT);
Sensor.S3.activate();
Motor.A.setPower(7);
Motor.B.setPower(7);
}
}
syntax highlighted by Code2HTML, v. 0.9.1