void line_follow() { int our_alignment; int blah; if (OUR_COLOR * analog(LINE_SENSOR_LEFT) < OUR_COLOR * (highval[LINE_SENSOR_LEFT] + lowval[LINE_SENSOR_LEFT]) / 2) { printf("\error! not on line!"); /* return; */ } while (1) { /* time restraint/check for wall */ /*our_alignment = standardize_sensor(LINE_SENSOR_LEFT) - standardize_sensor(LINE_SENSOR_RIGHT);*/ our_alignment = standardize_sensor(LINE_SENSOR_LEFT) - standardize_sensor(LINE_SENSOR_RIGHT); if (abs(our_alignment) > 30) { sleep(.01); blah = (standardize_sensor(LINE_SENSOR_LEFT) - standardize_sensor(LINE_SENSOR_RIGHT)); sleep(.01); blah = (blah + (standardize_sensor(LINE_SENSOR_LEFT) - standardize_sensor(LINE_SENSOR_RIGHT))) / 2; if (abs(blah) < 30) { /* avoid negative sleep vals */ blah = 30; } printf("\nA:%d B:%d I:%d",blah,(standardize_sensor(LINE_SENSOR_LEFT) - standardize_sensor(LINE_SENSOR_RIGHT)),our_alignment); go_direction(our_alignment/abs(our_alignment) * 40,1); sleep(.015 * ((float) (abs(blah) - 30))); go_direction(0,1); sleep(.03 * ((float) (abs(blah) - 30))); go_direction(-1 * our_alignment/abs(our_alignment) * 40,1); sleep(.01 * ((float) (abs(blah) - 30))); } go_direction(0,1); /*go_direction(current_dir - our_alignment,1); printf("\n%d",current_dir - our_alignment);*/ sleep(.01); } } void line_follow_2() { int our_alignment; int done = 0; while (1) { our_alignment = standardize_sensor(LINE_SENSOR_LEFT) - standardize_sensor(LINE_SENSOR_RIGHT); if (!on_line() && (abs(our_alignment) < 10)) { while(!near_line()) { go_direction(0,1); sleep(0.01); } if (our_alignment > 0) { while(!right_of_line()) { go_direction(0,1); sleep(0.01); } } else { while(!left_of_line()) { go_direction(0,1); sleep(0.01); } } } if (on_line()) { go_direction(0,1); sleep(.01); } else { done = 1; /* to the left of the line */ if (our_alignment > 0) { /* while(near_line()) { go_direction(100,1); sleep(0.01); } */ go_direction(100,1); sleep(0.8); while(!near_line()) { go_direction(-20,1); sleep(0.01); } while(!on_line()) { go_direction(-40,1); sleep(0.01); } /* to the right of the line */ } else { /* while(near_line()) { go_direction(-100,1); sleep(0.01); } */ go_direction(-100,1); sleep(0.75); while(!near_line()) { go_direction(20,1); sleep(0.01); } while(!on_line()) { go_direction(40,1); sleep(0.01); } } } } } void line_follow_3() { int our_alignment; while (1) { our_alignment = standardize_sensor(LINE_SENSOR_LEFT) - standardize_sensor(LINE_SENSOR_RIGHT); if (on_line() || (abs(our_alignment) < 10)) { go_direction(0,1); sleep(0.01); } else { if (our_alignment > 0) { while(!on_line()) { go_direction(30,1); sleep(0.01); } while(!on_line()) { go_direction(-10,1); sleep(0.01); } } else { while(!on_line()) { go_direction(-30,1); sleep(0.01); } while(!on_line()) { go_direction(10,1); sleep(0.01); } } } } } int on_line() { return (OUR_COLOR * analog(LINE_SENSOR_CENTER) < OUR_COLOR * (highval[LINE_SENSOR_CENTER] + lowval[LINE_SENSOR_CENTER]) / 2); } int left_of_line() { return ((OUR_COLOR * analog(LINE_SENSOR_RIGHT) < OUR_COLOR * (highval[LINE_SENSOR_RIGHT] + lowval[LINE_SENSOR_RIGHT]) / 2)); } int right_of_line() { return ((OUR_COLOR * analog(LINE_SENSOR_LEFT) < OUR_COLOR * (highval[LINE_SENSOR_LEFT] + lowval[LINE_SENSOR_LEFT]) / 2)); } int near_line() { return ((OUR_COLOR * analog(LINE_SENSOR_RIGHT) < OUR_COLOR * (highval[LINE_SENSOR_RIGHT] + lowval[LINE_SENSOR_RIGHT]) / 2) || (OUR_COLOR * analog(LINE_SENSOR_LEFT) < OUR_COLOR * (highval[LINE_SENSOR_LEFT] + lowval[LINE_SENSOR_LEFT]) / 2)); }