/* Programming Mobile Robots Example program for line following and bumper sensing Raul Trejo, Spring 1999 */ /* global variables to identify sensor conections */ int LEFT_BUMP=7, RIGHT_BUMP=8; int LEFT_LINE=1, RIGHT_LINE=0; int LINE_TRESHOLD = 208; /*treshold for photo sensors*/ int LEFT_MOTOR =0, RIGHT_MOTOR=1; int FORWARD_SPEED=60; int BACK_SPEED= -60; float TURN_DELAY= 2.0; /* functions to get impact readings from the bumpers*/ /*return true if left bumper hits something*/ int left_bump() {return digital(LEFT_BUMP); } /*same for right bumper*/ int right_bump() {return digital(RIGHT_BUMP); } /* return true if we have hit a wall */ int bump_on_a_wall() { return left_bump() || right_bump(); } /* functions for reading photosensors on the floor */ /* return true if left sensor is over a black line */ int left_on_line() { return analog(LEFT_LINE) > LINE_TRESHOLD; } /*same for right sensor*/ int right_on_line() { return analog(RIGHT_LINE) > LINE_TRESHOLD; } /* behaviour of the robot follow the line, stop if the robot hits an obstacle*/ void main() { printf("press start to begin \n"); start_press(); motor(LEFT_MOTOR, FORWARD_SPEED); motor(RIGHT_MOTOR, FORWARD_SPEED); while(!bump_on_a_wall()) { if(left_on_line()) {motor(LEFT_MOTOR, BACK_SPEED); sleep(TURN_DELAY); motor(LEFT_MOTOR, FORWARD_SPEED); } if(right_on_line()) {motor(RIGHT_MOTOR, BACK_SPEED); sleep(TURN_DELAY); motor(RIGHT_MOTOR, FORWARD_SPEED); } } ao(); beep(); printf("It's over!"); }