/** * Runs the main part of the program. Note it is an infinite loop. * @author Group B1 * @date 12/4/2012 */ void run_robot(oi_t *oi) { int x = STARTING_X_POS; int y = STARTING_Y_POS; int o = STARTING_ORENTATION; int msg = 0; while(1){ char c = read_one_char(); oi_update(oi); printf("11 %d\n", oi->virtual_wall); lprintf("\n Group B1\n\n\n\n"); lprintf("%d %d %d %d\n%d", oi->cliff_left_signal , oi->cliff_frontleft_signal , oi->cliff_frontright_signal , oi->cliff_right_signal, oi->virtual_wall ); if( oi->cliff_left_signal > 1000 && oi->cliff_frontleft_signal > 1000 && oi->cliff_frontright_signal > 1000 && oi->cliff_right_signal > 1000 ){ printf("10\n"); } if(c == FORWARD) { if(move_forward(oi, DEFAULT_DISTANCE) >= DEFAULT_DISTANCE){ if(o == NORTH){ y = y + 1 * STEP; } else if(o == EAST){ x = x + 1 * STEP; } else if(o == SOUTH){ y = y - 1 * STEP; } else if(o == WEST){ x = x - 1 * STEP; } printf("2 %d %d %d %d\n", x,y,o,msg); } } else if(c == RIGHT_TURN) { turn_clockwise(); if(o == NORTH){ o = WEST; } else if(o == EAST){ o = NORTH; } else if(o == SOUTH){ o = EAST; } else if(o == WEST){ o = SOUTH; } printf("2 %d %d %d %d\n", x,y,o,msg); } else if(c == LEFT_TURN) { turn_counter_clockwise(); if(o == NORTH){ o = EAST; } else if(o == EAST){ o = SOUTH; } else if(o == SOUTH){ o = WEST; } else if(o == WEST){ o = NORTH; } printf("2 %d %d %d %d\n", x,y,o,msg); } else if(c == RESET) { move_servo(0); x = STARTING_X_POS; y = STARTING_Y_POS; o = STARTING_ORENTATION; msg = 0; printf("2 %d %d %d %d\n", x,y,o,msg); } else if(c == MUSIC) { load_song(); oi_play_song(JAWS); } else if(c == SCAN) { oi_update(oi); printf("1 %d %d %d %d %d ", oi->virtual_wall ,x,y,o,msg); for(int i = 0 ; i <= 1800 ;i = i + 1) { move_servo(i * 1); int x = ir_distance(); printf("%d ", x); } printf("\n"); move_servo(0); } } }
/** * * Function to control the iRobot depending on the character pressed, call it like keyboardInput(serial_getc()); * @param c the character that would determine if the iRobot moves, uses serial_getc() */ void keyboardInput(char c) { // toggle precision mode, if activated, move is 5 cm and 5 degrees if(c == 'T') { if(precision == 0){ serial_puts("PRECISION ACTIVATED\n\r\n\r"); precision = 1; } else{ serial_puts("PRECISION DEACTIVATED\n\r\n\r"); precision = 0; } } // move the iRobot forward, 10 cm else if(c == 'W') { if(precision) { serial_puts("MOVING FORWARD 5 CM\n\r\n\r"); moveFowardUpdate(sensor_data, 5); } else { serial_puts("MOVING FORWARD 10 CM\n\r\n\r"); moveFowardUpdate(sensor_data, 10); } wait_ms(100); } // move the iRobot backwards, 10 cm else if(c == 'S') { if(precision) { serial_puts("MOVING BACKWARD 5 CM\n\r\n\r"); moveBackward(sensor_data, 5); } else { serial_puts("MOVING BACKWARD 10 CM\n\r\n\r"); moveBackward(sensor_data, 10); } wait_ms(100); } // rotate the iRobot counter clockwise, 15 degrees else if(c == 'A') { if(precision) { serial_puts("TURNING COUNTER CLOCKWISE 5 DEGREES\n\r\n\r"); turn_counter_clockwise(sensor_data, 5); // TODO } else { serial_puts("TURNING COUNTER CLOCKWISE 15 DEGREES\n\r\n\r"); turn_counter_clockwise(sensor_data, 15); // TODO } wait_ms(100); } // rotate the iRobot clockwise, 15 degrees else if(c == 'D') { if(precision) { serial_puts("TURNING CLOCKWISE 5 DEGREEES\n\r\n\r"); turn_clockwise(sensor_data, 5); // TODO } else { serial_puts("TURNING CLOCKWISE 15 DEGREEES\n\r\n\r"); turn_clockwise(sensor_data, 15); // TODO } wait_ms(100); } // start sweeping for ir and sonar data else if(c == ' ') { oi_play_song(0); serial_puts("SWEEPING FOR OBJECTS\n\r"); smallestObjectSweep(); wait_ms(100); } // clear screen else if(c == '-') { clearScreen(); wait_ms(100); } // finish command else if(c == 'f') { if(serial_getc == 'i') { if(serial_getc == 'n') { if(serial_getc == 'i') { if(serial_getc == 's') { if(serial_getc == 'h') { isFinished = 1; } } } } } } // if any other key is pressed, nothing happens }