//written by Martin Wewior, Sascha Germer, Mustapha Jafour int sensorlight = 0; int length = 0; int abort= 0; task main() { SetSensor(SENSOR_1, SENSOR_ROTATION); SetSensor(SENSOR_3, SENSOR_ROTATION); SetSensorType(SENSOR_2, SENSOR_TYPE_LIGHT); SetSensorMode(SENSOR_2, SENSOR_MODE_RAW); start light; start infrared; start rotation; OnFwd(OUT_A+OUT_C); until (abort==1); PlaySound(SOUND_DOUBLE_BEEP); stop light; stop infrared; OnFwd(OUT_A+OUT_C); ClearSensor(SENSOR_1); ClearSensor(SENSOR_3); until(SENSOR_1 >= abs(length+20)); Off(OUT_A+OUT_C); stop rotation; PlaySound(SOUND_FAST_UP); } task light() { sensorlight = SENSOR_2; while (true) { if (abs(sensorlight - SENSOR_2) > 110) { turn(); } } } task infrared() { while (true) { SendMessage(1); Wait(3); } } void turn() { length = SENSOR_1; ClearSensor(SENSOR_1); ClearSensor(SENSOR_3); OnFwd(OUT_A); OnRev(OUT_C); until (abs(SENSOR_1) > 51); ClearSensor(SENSOR_1); ClearSensor(SENSOR_3); stop rotation; OnFwd(OUT_A+OUT_C); Wait(10); start rotation; abort=1; } task rotation() { while(true) { if (abs(SENSOR_1) > abs(SENSOR_3)) { SetOutput(OUT_A,OUT_FLOAT); until (abs(SENSOR_1) <= (abs(SENSOR_3)+3)); SetOutput(OUT_A,OUT_ON); } else if (abs(SENSOR_1) < abs(SENSOR_3)) { SetOutput(OUT_C,OUT_FLOAT); until ((abs(SENSOR_1)+3) >= abs(SENSOR_3)); SetOutput(OUT_C,OUT_ON); } else { SetOutput(OUT_A+OUT_C,OUT_ON); } } }