TomYumBoys / Mbed 2 deprecated MM2017

Dependencies:   mbed

Committer:
kolanery
Date:
Sat May 20 23:26:40 2017 +0000
Revision:
20:b18eed69ee32
Parent:
19:931f8257fb74
Child:
22:1a02d66218e4
milestone 2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kolanery 0:cb667de3a336 1 #include "drivecontrol.h"
kolanery 4:73510c7fa316 2 #include "io_modules.h"
szh66 6:1bcfda49e146 3 #include "mbed.h"
kolanery 16:c26d8e007df5 4 //// PIN ASSIGNMENTS
szh66 6:1bcfda49e146 5 AnalogIn battery(PA_3);
szh66 6:1bcfda49e146 6 DigitalOut led_1(PB_12);
szh66 6:1bcfda49e146 7 DigitalOut led_2(PB_13);
szh66 6:1bcfda49e146 8 DigitalOut led_3(PB_14);
szh66 6:1bcfda49e146 9 DigitalOut led_4(PB_15);
szh66 6:1bcfda49e146 10 Serial serial (PA_9, PA_10);
kolanery 16:c26d8e007df5 11 // CONTROL CONSTANTS
kolanery 16:c26d8e007df5 12 const int STRAIGHT = 0, LEFT = 1, RIGHT = 2, UTURN = 3;
kolanery 16:c26d8e007df5 13 const int START_POS = 0, END_POS = 0;
kolanery 16:c26d8e007df5 14 const int CONTROL = 1;
kolanery 2:619b02232144 15
kolanery 16:c26d8e007df5 16 void check_battery () {
szh66 6:1bcfda49e146 17 // pc.baud(9600);
kolanery 4:73510c7fa316 18 // using the serial functions will have an impact on timing.
kolanery 15:151e59899221 19 // serial.printf("voltage value is: %3.3f%%\r\n", battery.read()*100.0f);
kolanery 4:73510c7fa316 20 // serial.printf("normalized: 0x%04X \r\n", battery.read_u16());
kolanery 15:151e59899221 21 if (battery.read() < 0.70f){
kolanery 0:cb667de3a336 22 // flash led
kolanery 4:73510c7fa316 23 led_1 = 1;
kolanery 4:73510c7fa316 24 led_2 = 1;
kolanery 4:73510c7fa316 25 led_3 = 1;
kolanery 4:73510c7fa316 26 led_4 = 1;
kolanery 15:151e59899221 27 }
kolanery 0:cb667de3a336 28 }
kolanery 0:cb667de3a336 29
kolanery 16:c26d8e007df5 30 void flash_led (int _led_1, int _led_2, int _led_3, int _led_4) {
kolanery 16:c26d8e007df5 31 led_1 = _led_1;
kolanery 16:c26d8e007df5 32 led_2 = _led_2;
kolanery 16:c26d8e007df5 33 led_3 = _led_3;
kolanery 16:c26d8e007df5 34 led_4 = _led_4;
kolanery 16:c26d8e007df5 35 }
kolanery 16:c26d8e007df5 36
kolanery 0:cb667de3a336 37 int main() {
kolanery 4:73510c7fa316 38 DriveControl * driver = new DriveControl (START_POS, END_POS);
kolanery 14:a646667ac9ea 39 driver->resetEncoders();
kolanery 16:c26d8e007df5 40 int state, count = 0;
kolanery 14:a646667ac9ea 41 bool finished_traverse_one_cell = true;
kolanery 16:c26d8e007df5 42 //wait(1.5);
kolanery 16:c26d8e007df5 43 while(CONTROL) {
kolanery 16:c26d8e007df5 44 check_battery();
kolanery 15:151e59899221 45 wait_ms(1);
kolanery 16:c26d8e007df5 46
kolanery 16:c26d8e007df5 47 //wait(2);
kolanery 16:c26d8e007df5 48 //driver->print_serial_ports();
kolanery 16:c26d8e007df5 49
kolanery 16:c26d8e007df5 50
kolanery 14:a646667ac9ea 51 if (finished_traverse_one_cell == true) {
kolanery 16:c26d8e007df5 52 if (!driver->has_right_wall()) {
kolanery 19:931f8257fb74 53 wait(2);
kolanery 16:c26d8e007df5 54 state = RIGHT;
kolanery 19:931f8257fb74 55 driver->resetEncoders();
kolanery 15:151e59899221 56 }
kolanery 15:151e59899221 57 else if (!driver->has_left_wall()) {
kolanery 19:931f8257fb74 58 wait(2);
kolanery 15:151e59899221 59 state = LEFT;
kolanery 19:931f8257fb74 60 driver->resetEncoders();
kolanery 15:151e59899221 61 }
kolanery 16:c26d8e007df5 62 else if(!driver->has_front_wall()){
kolanery 15:151e59899221 63 state = STRAIGHT;
kolanery 15:151e59899221 64 driver->resetEncoders();
kolanery 14:a646667ac9ea 65 }
kolanery 16:c26d8e007df5 66 else{
kolanery 19:931f8257fb74 67 wait(2);
kolanery 16:c26d8e007df5 68 state = UTURN;
kolanery 16:c26d8e007df5 69 driver->resetEncoders();
kolanery 16:c26d8e007df5 70 count = 0;
kolanery 16:c26d8e007df5 71 }
kolanery 16:c26d8e007df5 72 finished_traverse_one_cell = false;
kolanery 7:7215adbae3da 73 }
kolanery 14:a646667ac9ea 74
kolanery 16:c26d8e007df5 75
kolanery 14:a646667ac9ea 76 if (state == STRAIGHT) {
kolanery 17:043ed1d0196f 77 if (!driver->should_finish_drive_forward() && !driver-> has_front_wall()) {
kolanery 16:c26d8e007df5 78 driver->drive_forward();
kolanery 16:c26d8e007df5 79 flash_led(1, 0, 0, 0);
kolanery 16:c26d8e007df5 80 }
kolanery 16:c26d8e007df5 81 else {
kolanery 16:c26d8e007df5 82 driver->clear_pid();
kolanery 16:c26d8e007df5 83 driver->stop();
kolanery 16:c26d8e007df5 84 driver->resetEncoders();
kolanery 16:c26d8e007df5 85 flash_led (0, 0, 0, 0);
kolanery 16:c26d8e007df5 86 finished_traverse_one_cell = true;
kolanery 16:c26d8e007df5 87 continue;
kolanery 14:a646667ac9ea 88 }
kolanery 7:7215adbae3da 89 }
kolanery 14:a646667ac9ea 90 if (state == RIGHT) {
kolanery 14:a646667ac9ea 91 if (!driver->should_finish_turn_right()) {
kolanery 14:a646667ac9ea 92 driver->turn_right();
kolanery 16:c26d8e007df5 93 flash_led (0, 1, 0, 0);
kolanery 14:a646667ac9ea 94 }
kolanery 14:a646667ac9ea 95 else {
kolanery 14:a646667ac9ea 96 driver->stop();
kolanery 16:c26d8e007df5 97 flash_led (0, 0, 0, 0);
kolanery 16:c26d8e007df5 98 //finished_traverse_one_cell = true;
kolanery 16:c26d8e007df5 99 state = STRAIGHT;
kolanery 16:c26d8e007df5 100 driver->resetEncoders();
kolanery 16:c26d8e007df5 101 driver->clear_pid();
kolanery 19:931f8257fb74 102 wait(0.25);
kolanery 14:a646667ac9ea 103 continue;
kolanery 14:a646667ac9ea 104 }
kolanery 14:a646667ac9ea 105 }
kolanery 14:a646667ac9ea 106 if (state == LEFT) {
kolanery 14:a646667ac9ea 107 if (!driver->should_finish_turn_left()) {
kolanery 14:a646667ac9ea 108 driver->turn_left();
kolanery 16:c26d8e007df5 109 flash_led (0, 0, 1, 0);
kolanery 16:c26d8e007df5 110 }
kolanery 16:c26d8e007df5 111 else {
kolanery 16:c26d8e007df5 112 driver->stop();
kolanery 16:c26d8e007df5 113 flash_led (0, 0, 0, 0);
kolanery 16:c26d8e007df5 114 //finished_traverse_one_cell = true;
kolanery 16:c26d8e007df5 115 state = STRAIGHT;
kolanery 16:c26d8e007df5 116 driver->resetEncoders();
kolanery 16:c26d8e007df5 117 driver->clear_pid();
kolanery 19:931f8257fb74 118 wait(0.25);
kolanery 16:c26d8e007df5 119 continue;
kolanery 16:c26d8e007df5 120 }
kolanery 16:c26d8e007df5 121 }
kolanery 16:c26d8e007df5 122
kolanery 16:c26d8e007df5 123 if (state == UTURN){
kolanery 16:c26d8e007df5 124 if (!driver->should_finish_turn_left()) {
kolanery 16:c26d8e007df5 125 driver->turn_left();
kolanery 16:c26d8e007df5 126 flash_led (0, 1, 1, 0);
kolanery 14:a646667ac9ea 127 }
kolanery 14:a646667ac9ea 128 else {
kolanery 14:a646667ac9ea 129 driver->stop();
kolanery 16:c26d8e007df5 130 driver->resetEncoders();
kolanery 16:c26d8e007df5 131 wait(0.25);
kolanery 16:c26d8e007df5 132 flash_led (0, 0, 0, 0);
kolanery 16:c26d8e007df5 133 count == 1 ? finished_traverse_one_cell = true: count++;
kolanery 16:c26d8e007df5 134 continue;
kolanery 16:c26d8e007df5 135 }
kolanery 20:b18eed69ee32 136 }
kolanery 16:c26d8e007df5 137 }
kolanery 16:c26d8e007df5 138 }
kolanery 16:c26d8e007df5 139
kolanery 16:c26d8e007df5 140
kolanery 16:c26d8e007df5 141 /*
kolanery 16:c26d8e007df5 142
kolanery 16:c26d8e007df5 143 if (!driver->has_front_wall()) {
kolanery 16:c26d8e007df5 144 if (!driver->should_finish_drive_forward()) {
kolanery 16:c26d8e007df5 145 driver->drive_forward();
kolanery 16:c26d8e007df5 146 flash_led(0, 1, 1, 0);
kolanery 16:c26d8e007df5 147 }
kolanery 16:c26d8e007df5 148 else {
kolanery 16:c26d8e007df5 149 driver->stop();
kolanery 16:c26d8e007df5 150 wait(1);
kolanery 16:c26d8e007df5 151 flash_led (0,0,0,0);
kolanery 16:c26d8e007df5 152 driver->resetEncoders();
kolanery 14:a646667ac9ea 153 finished_traverse_one_cell = true;
kolanery 14:a646667ac9ea 154 continue;
kolanery 14:a646667ac9ea 155 }
kolanery 16:c26d8e007df5 156 }
kolanery 16:c26d8e007df5 157 else {
kolanery 16:c26d8e007df5 158 driver->stop();
kolanery 16:c26d8e007df5 159 driver->resetEncoders();
kolanery 16:c26d8e007df5 160 flash_led (1, 1, 1, 0);
kolanery 16:c26d8e007df5 161 }
kolanery 16:c26d8e007df5 162
kolanery 16:c26d8e007df5 163
kolanery 16:c26d8e007df5 164
kolanery 16:c26d8e007df5 165
kolanery 16:c26d8e007df5 166 */