import josx.platform.rcx.*; class LineFollower implements SensorConstants { // 45 white // 30 black // White = Higher percentage public static void main (String[] aArg) throws Exception { Sensor.S1.setTypeAndMode(SensorConstants.SENSOR_TYPE_LIGHT, SensorConstants.SENSOR_MODE_PCT); Sensor.S1.activate(); Sensor.S3.setTypeAndMode(SensorConstants.SENSOR_TYPE_LIGHT, SensorConstants.SENSOR_MODE_PCT); Sensor.S3.activate(); int leftSensor=0; int rightSensor=0; int lastTime=0; int blackReading=100; int whiteReading=0; int avgReading=0; // Calibrate the line sensors Button runButton = Button.RUN; int breakOut=0; while(breakOut==0) { leftSensor = Sensor.S3.readValue(); rightSensor = Sensor.S1.readValue(); // Just use the left sensor for the calibration if (leftSensorwhiteReading) { whiteReading=leftSensor; } LCD.showNumber(whiteReading); if (runButton.isPressed()) { breakOut=1; } } avgReading = ((whiteReading - blackReading)/2) + blackReading; LCD.showNumber(avgReading); // Delay for five seconds try{Thread.sleep(5000);}catch(Exception e){} Motor.A.forward(); Motor.C.forward(); // Loop forever while (true){ leftSensor = Sensor.S3.readValue(); rightSensor = Sensor.S1.readValue(); if (leftSensor > avgReading && rightSensor > avgReading) { // Both Sensors see the white line LCD.showNumber(1); Motor.A.setPower(7); Motor.C.setPower(7); Motor.A.forward(); Motor.C.forward(); }else { LCD.showNumber(0); // Is the Line lost? if (leftSensor < avgReading && rightSensor < avgReading) { // The line is gone // Need to decide where the line was last if (lastTime==0) { // Line was last seen on the left // go left Motor.A.stop(); Motor.C.setPower(1); Motor.C.forward(); rightSensor = Sensor.S1.readValue(); while (rightSensor avgReading) { lastTime = 0; Motor.C.setPower(1); Motor.A.setPower(7); Motor.A.forward(); Motor.C.forward(); } if (rightSensor > avgReading) { lastTime = 1; Motor.A.setPower(1); Motor.C.setPower(7); Motor.A.forward(); Motor.C.forward(); } } } } } } class LineFollowBot implements SensorConstants { public void LineFollowBot(){ Sensor.S1.setTypeAndMode(SensorConstants.SENSOR_TYPE_LIGHT, SensorConstants.SENSOR_MODE_PCT); Sensor.S1.activate(); Sensor.S3.setTypeAndMode(SensorConstants.SENSOR_TYPE_LIGHT, SensorConstants.SENSOR_MODE_PCT); Sensor.S3.activate(); } public boolean isBright(){ if (Sensor.S3.readValue() > 40) { return true; } else { return false; } } }