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
main.cpp
- Committer:
- ryan_whr
- Date:
- 2017-05-21
- Revision:
- 24:249505c7c080
- Parent:
- 23:953651133b29
- Child:
- 25:7155cb993870
File content as of revision 24:249505c7c080:
#include "drivecontrol.h" #include "io_modules.h" #include "mbed.h" //// PIN ASSIGNMENTS AnalogIn battery(PA_3); DigitalOut led_1(PB_12); DigitalOut led_2(PB_13); DigitalOut led_3(PB_14); DigitalOut led_4(PB_15); Serial serial (PA_9, PA_10); // CONTROL CONSTANTS const int STRAIGHT = 0, LEFT = 1, RIGHT = 2, UTURN = 3; const int START_POS = 0, END_POS = 0; const int CONTROL = 1; 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; led_4 = 1; } } void flash_led (int _led_1, int _led_2, int _led_3, int _led_4) { led_1 = _led_1; led_2 = _led_2; led_3 = _led_3; led_4 = _led_4; } int main() { DriveControl * driver = new DriveControl (START_POS, END_POS); driver->resetEncoders(); int state, count = 0; bool finished_traverse_one_cell = true; //wait(1.5); while(CONTROL) { check_battery(); wait_ms(1); //wait(2); //driver->print_serial_ports(); if (finished_traverse_one_cell == true) { /*if (!driver->has_right_wall() && !driver->has_left_wall()) { wait(1); if ((rand() % 4) == 0) { state = LEFT; driver->resetEncoders(); } else { state = RIGHT; driver->resetEncoders(); } } else */if (!driver->has_right_wall()) { wait(0.25); state = RIGHT; driver->resetEncoders(); } else if (!driver->has_left_wall()) { wait(0.25); state = LEFT; driver->resetEncoders(); } else if(!driver->has_front_wall()){ state = STRAIGHT; driver->resetEncoders(); } else{ wait(0.25); state = UTURN; driver->resetEncoders(); count = 0; } finished_traverse_one_cell = false; } 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); //finished_traverse_one_cell = true; state = STRAIGHT; driver->resetEncoders(); driver->clear_pid(); //wait(0.25); continue; } } if (state == UTURN){ if (!driver->should_finish_turn_left()) { driver->turn_left(); flash_led (0, 1, 1, 0); } 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); } */