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:
- kolanery
- Date:
- 2017-05-20
- Revision:
- 19:931f8257fb74
- Parent:
- 17:043ed1d0196f
- Child:
- 20:b18eed69ee32
File content as of revision 19:931f8257fb74:
#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()) {
wait(2);
state = RIGHT;
driver->resetEncoders();
}
else if (!driver->has_left_wall()) {
wait(2);
state = LEFT;
driver->resetEncoders();
}
else if(!driver->has_front_wall()){
state = STRAIGHT;
driver->resetEncoders();
}
else{
wait(2);
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);
}
*/