Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Diff: main.cpp
- Revision:
- 26:191ec0e78774
- Parent:
- 25:7155cb993870
- Child:
- 27:b980fce784ea
--- a/main.cpp Sun May 21 06:34:21 2017 +0000 +++ b/main.cpp Sun May 21 08:10:29 2017 +0000 @@ -13,14 +13,11 @@ const int STRAIGHT = 0, LEFT = 1, RIGHT = 2, UTURN = 3; const int START_POS = 0, END_POS = 0; const int CONTROL = 1; +Timer flood_fill_timer; +Timer state_timeout_timer; void check_battery () { - // pc.baud(9600); - // using the serial functions will have an impact on timing. - // serial.printf("voltage value is: %3.3f%%\r\n", battery.read()*100.0f); - // serial.printf("normalized: 0x%04X \r\n", battery.read_u16()); if (battery.read() < 0.70f){ - // flash led led_1 = 1; led_2 = 1; led_3 = 1; @@ -40,25 +37,113 @@ driver->resetEncoders(); int state, count = 0; bool finished_traverse_one_cell = true; + Mouse *my_mouse = new Mouse(); + flood_fill_timer.start(); + while(flood_fill_timer.read() < 50) { + check_battery(); + wait_ms(1); + if (finished_traverse_one_cell == true) { + if (state_timeout_timer.read() > 10) { + driver->stop(); + wait(0.5); + driver->reverse(); + wait(0.5); + driver->stop(); + driver->resetEncoders(); + state_timeout_timer.reset(); + state_timeout_timer.start(); + } + state = my_mouse->solve_maze(); + if(state == RIGHT){ + flash_led(1,1,0,0); + wait(0.25); + driver->resetEncoders(); + } + else if(state == LEFT){ + flash_led(1,0,1,0); + wait(0.25); + driver->resetEncoders(); + } + else if(state == UTURN){ + flash_led(1,1,1,0); + wait(0.25); + driver->resetEncoders(); + count = 0; + } + finished_traverse_one_cell = false; + } + state_timeout_timer.start(); + if (state == STRAIGHT) { + if (!driver->should_finish_drive_forward() && !driver-> has_front_wall()) { + driver->drive_forward(); + flash_led(1, 0, 0, 0); + } + else { + driver->clear_pid(); + driver->stop(); + driver->resetEncoders(); + flash_led (0, 0, 0, 0); + finished_traverse_one_cell = true; + continue; + } + } + if (state == RIGHT) { + if (!driver->should_finish_turn_right()) { + driver->turn_right(); + flash_led (0, 1, 0, 0); + } + else { + driver->stop(); + flash_led (0, 0, 0, 0); + //finished_traverse_one_cell = true; + state = STRAIGHT; + driver->resetEncoders(); + driver->clear_pid(); + // wait(0.25); + continue; + } + } + if (state == LEFT) { + if (!driver->should_finish_turn_left()) { + driver->turn_left(); + flash_led (0, 0, 1, 0); + } + else { + driver->stop(); + flash_led (0, 0, 0, 0); + state = STRAIGHT; + driver->resetEncoders(); + driver->clear_pid(); + continue; + } + } + + if (state == UTURN){ + if (!driver->should_finish_turn_left()) { + driver->turn_left(); + flash_led (0, 1, 1, 0); + } + else { + driver->stop(); + driver->resetEncoders(); + flash_led (0, 0, 0, 0); + count == 1 ? finished_traverse_one_cell = true: count++; + continue; + } + } + } + flood_fill_timer.stop(); + state = count = 0; + finished_traverse_one_cell = true; - Mouse *my_mouse = new Mouse(); - - //wait(1.5); + flash_led(1,1,1,1); while(CONTROL) { - check_battery(); - wait_ms(1); - - //wait(2); - //driver->print_serial_ports(); - - - - + check_battery(); + wait_ms(1); if (finished_traverse_one_cell == true) { - - /*if (!driver->has_right_wall() && !driver->has_left_wall()) { + if (!driver->has_right_wall() && !driver->has_left_wall()) { wait(1); - if ((rand() % 4) == 0) { + if ((rand() % 3) == 0) { state = LEFT; driver->resetEncoders(); } @@ -88,26 +173,6 @@ driver->resetEncoders(); count = 0; } - */ - - state = my_mouse->solve_maze(); - if(state == RIGHT){ - flash_led(1,1,0,0); - wait(0.25); - driver->resetEncoders(); - } - else if(state == LEFT){ - flash_led(1,0,1,0); - wait(0.25); - driver->resetEncoders(); - } - else if(state == UTURN){ - flash_led(1,1,1,0); - wait(0.25); - driver->resetEncoders(); - count = 0; - } - finished_traverse_one_cell = false; } @@ -149,11 +214,9 @@ else { driver->stop(); flash_led (0, 0, 0, 0); - //finished_traverse_one_cell = true; state = STRAIGHT; driver->resetEncoders(); driver->clear_pid(); - //wait(0.25); continue; } } @@ -166,39 +229,10 @@ else { driver->stop(); driver->resetEncoders(); - //wait(0.25); flash_led (0, 0, 0, 0); count == 1 ? finished_traverse_one_cell = true: count++; continue; } } } -} - - -/* - - if (!driver->has_front_wall()) { - if (!driver->should_finish_drive_forward()) { - driver->drive_forward(); - flash_led(0, 1, 1, 0); - } - else { - driver->stop(); - wait(1); - flash_led (0,0,0,0); - driver->resetEncoders(); - finished_traverse_one_cell = true; - continue; - } - } - else { - driver->stop(); - driver->resetEncoders(); - flash_led (1, 1, 1, 0); - } - - - - -*/ \ No newline at end of file +} \ No newline at end of file