//Calibration to field conditions for RoboCup Junior soccer //David Wyatt 13/5/2003 //MUST be run before using RCJ attacker 2.nqc or RCJ goalie 2.nqc //N.B. Light sensors set to raw mode, where bright light == low value #define LIGHT_FLOOR SENSOR_1 //Uncollimated light sensor pointing downwards to detect position on field from grayscale gradient #define LIGHT_FWD SENSOR_2 //Collimated light sensor pointing forwards to detect ball #define BUMPER SENSOR_3 //Front bumper to detect ball and obstacles #define LEFT OUT_A //Left motor - FWD == forwards (i.e. not reversed) #define RIGHT OUT_C //Right motor - FWD == forwards (i.e. not reversed) #define ERROR 2 //Noise value in raw light sensor reading //In deciseconds #define WHOLETURN 15 int home=0, away=0, field_brightness=1023; task main() { init(); ends(); background(); } void init() { SetSensorType(LIGHT_FLOOR, SENSOR_TYPE_LIGHT); SetSensorMode(LIGHT_FLOOR, SENSOR_MODE_RAW); SetSensorType(LIGHT_FWD, SENSOR_TYPE_LIGHT); SetSensorMode(LIGHT_FWD, SENSOR_MODE_RAW); SetSensor(BUMPER, SENSOR_TOUCH); } void ends() { do { until (BUMPER == 0); until (BUMPER == 1); home = LIGHT_FLOOR; PlaySound(SOUND_CLICK); until (BUMPER == 0); until (BUMPER == 1); away = LIGHT_FLOOR; if (abs(home - away) <= ERROR) {PlaySound(SOUND_DOWN);} } while (abs(home - away) <= ERROR); PlaySound(SOUND_UP); } void background() { until (BUMPER == 0); until (BUMPER == 1); OnFwd(LEFT); OnRev(RIGHT); ClearTimer(0); while(Timer(0) <= WHOLETURN) { if (LIGHT_FWD < field_brightness) {field_brightness = LIGHT_FWD;} } Off(LEFT + RIGHT); PlaySound(SOUND_UP); }