TomYumBoys / Mbed 2 deprecated MM2017

Dependencies:   mbed

Committer:
ryan_whr
Date:
Sun May 21 03:09:44 2017 +0000
Revision:
22:1a02d66218e4
Parent:
20:b18eed69ee32
Child:
23:953651133b29
need fix flash turn

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();
ryan_whr 22:1a02d66218e4 49
ryan_whr 22:1a02d66218e4 50
kolanery 16:c26d8e007df5 51
kolanery 16:c26d8e007df5 52
ryan_whr 22:1a02d66218e4 53 if (finished_traverse_one_cell == true) {
ryan_whr 22:1a02d66218e4 54
ryan_whr 22:1a02d66218e4 55 if (!driver->has_right_wall() && !driver->has_left_wall()) {
ryan_whr 22:1a02d66218e4 56 wait(1);
ryan_whr 22:1a02d66218e4 57 if ((rand() % 4) == 0) {
ryan_whr 22:1a02d66218e4 58 state = LEFT;
ryan_whr 22:1a02d66218e4 59 driver->resetEncoders();
ryan_whr 22:1a02d66218e4 60 }
ryan_whr 22:1a02d66218e4 61 else {
ryan_whr 22:1a02d66218e4 62 state = RIGHT;
ryan_whr 22:1a02d66218e4 63 driver->resetEncoders();
ryan_whr 22:1a02d66218e4 64 }
ryan_whr 22:1a02d66218e4 65
ryan_whr 22:1a02d66218e4 66 }
ryan_whr 22:1a02d66218e4 67 else if (!driver->has_right_wall()) {
ryan_whr 22:1a02d66218e4 68 wait(0.25);
kolanery 16:c26d8e007df5 69 state = RIGHT;
kolanery 19:931f8257fb74 70 driver->resetEncoders();
kolanery 15:151e59899221 71 }
kolanery 15:151e59899221 72 else if (!driver->has_left_wall()) {
ryan_whr 22:1a02d66218e4 73 wait(0.25);
kolanery 15:151e59899221 74 state = LEFT;
kolanery 19:931f8257fb74 75 driver->resetEncoders();
kolanery 15:151e59899221 76 }
kolanery 16:c26d8e007df5 77 else if(!driver->has_front_wall()){
kolanery 15:151e59899221 78 state = STRAIGHT;
kolanery 15:151e59899221 79 driver->resetEncoders();
kolanery 14:a646667ac9ea 80 }
kolanery 16:c26d8e007df5 81 else{
ryan_whr 22:1a02d66218e4 82 wait(0.25);
kolanery 16:c26d8e007df5 83 state = UTURN;
kolanery 16:c26d8e007df5 84 driver->resetEncoders();
kolanery 16:c26d8e007df5 85 count = 0;
kolanery 16:c26d8e007df5 86 }
kolanery 16:c26d8e007df5 87 finished_traverse_one_cell = false;
kolanery 7:7215adbae3da 88 }
kolanery 14:a646667ac9ea 89
kolanery 16:c26d8e007df5 90
kolanery 14:a646667ac9ea 91 if (state == STRAIGHT) {
kolanery 17:043ed1d0196f 92 if (!driver->should_finish_drive_forward() && !driver-> has_front_wall()) {
kolanery 16:c26d8e007df5 93 driver->drive_forward();
kolanery 16:c26d8e007df5 94 flash_led(1, 0, 0, 0);
kolanery 16:c26d8e007df5 95 }
kolanery 16:c26d8e007df5 96 else {
kolanery 16:c26d8e007df5 97 driver->clear_pid();
kolanery 16:c26d8e007df5 98 driver->stop();
kolanery 16:c26d8e007df5 99 driver->resetEncoders();
kolanery 16:c26d8e007df5 100 flash_led (0, 0, 0, 0);
kolanery 16:c26d8e007df5 101 finished_traverse_one_cell = true;
kolanery 16:c26d8e007df5 102 continue;
kolanery 14:a646667ac9ea 103 }
kolanery 7:7215adbae3da 104 }
kolanery 14:a646667ac9ea 105 if (state == RIGHT) {
kolanery 14:a646667ac9ea 106 if (!driver->should_finish_turn_right()) {
kolanery 14:a646667ac9ea 107 driver->turn_right();
kolanery 16:c26d8e007df5 108 flash_led (0, 1, 0, 0);
kolanery 14:a646667ac9ea 109 }
kolanery 14:a646667ac9ea 110 else {
kolanery 14:a646667ac9ea 111 driver->stop();
kolanery 16:c26d8e007df5 112 flash_led (0, 0, 0, 0);
kolanery 16:c26d8e007df5 113 //finished_traverse_one_cell = true;
kolanery 16:c26d8e007df5 114 state = STRAIGHT;
kolanery 16:c26d8e007df5 115 driver->resetEncoders();
kolanery 16:c26d8e007df5 116 driver->clear_pid();
ryan_whr 22:1a02d66218e4 117 // wait(0.25);
kolanery 14:a646667ac9ea 118 continue;
kolanery 14:a646667ac9ea 119 }
kolanery 14:a646667ac9ea 120 }
kolanery 14:a646667ac9ea 121 if (state == LEFT) {
kolanery 14:a646667ac9ea 122 if (!driver->should_finish_turn_left()) {
kolanery 14:a646667ac9ea 123 driver->turn_left();
kolanery 16:c26d8e007df5 124 flash_led (0, 0, 1, 0);
kolanery 16:c26d8e007df5 125 }
kolanery 16:c26d8e007df5 126 else {
kolanery 16:c26d8e007df5 127 driver->stop();
kolanery 16:c26d8e007df5 128 flash_led (0, 0, 0, 0);
kolanery 16:c26d8e007df5 129 //finished_traverse_one_cell = true;
kolanery 16:c26d8e007df5 130 state = STRAIGHT;
kolanery 16:c26d8e007df5 131 driver->resetEncoders();
kolanery 16:c26d8e007df5 132 driver->clear_pid();
ryan_whr 22:1a02d66218e4 133 //wait(0.25);
kolanery 16:c26d8e007df5 134 continue;
kolanery 16:c26d8e007df5 135 }
kolanery 16:c26d8e007df5 136 }
kolanery 16:c26d8e007df5 137
kolanery 16:c26d8e007df5 138 if (state == UTURN){
kolanery 16:c26d8e007df5 139 if (!driver->should_finish_turn_left()) {
kolanery 16:c26d8e007df5 140 driver->turn_left();
kolanery 16:c26d8e007df5 141 flash_led (0, 1, 1, 0);
kolanery 14:a646667ac9ea 142 }
kolanery 14:a646667ac9ea 143 else {
kolanery 14:a646667ac9ea 144 driver->stop();
kolanery 16:c26d8e007df5 145 driver->resetEncoders();
ryan_whr 22:1a02d66218e4 146 //wait(0.25);
kolanery 16:c26d8e007df5 147 flash_led (0, 0, 0, 0);
kolanery 16:c26d8e007df5 148 count == 1 ? finished_traverse_one_cell = true: count++;
kolanery 16:c26d8e007df5 149 continue;
kolanery 16:c26d8e007df5 150 }
kolanery 20:b18eed69ee32 151 }
kolanery 16:c26d8e007df5 152 }
kolanery 16:c26d8e007df5 153 }
kolanery 16:c26d8e007df5 154
kolanery 16:c26d8e007df5 155
kolanery 16:c26d8e007df5 156 /*
kolanery 16:c26d8e007df5 157
kolanery 16:c26d8e007df5 158 if (!driver->has_front_wall()) {
kolanery 16:c26d8e007df5 159 if (!driver->should_finish_drive_forward()) {
kolanery 16:c26d8e007df5 160 driver->drive_forward();
kolanery 16:c26d8e007df5 161 flash_led(0, 1, 1, 0);
kolanery 16:c26d8e007df5 162 }
kolanery 16:c26d8e007df5 163 else {
kolanery 16:c26d8e007df5 164 driver->stop();
kolanery 16:c26d8e007df5 165 wait(1);
kolanery 16:c26d8e007df5 166 flash_led (0,0,0,0);
kolanery 16:c26d8e007df5 167 driver->resetEncoders();
kolanery 14:a646667ac9ea 168 finished_traverse_one_cell = true;
kolanery 14:a646667ac9ea 169 continue;
kolanery 14:a646667ac9ea 170 }
kolanery 16:c26d8e007df5 171 }
kolanery 16:c26d8e007df5 172 else {
kolanery 16:c26d8e007df5 173 driver->stop();
kolanery 16:c26d8e007df5 174 driver->resetEncoders();
kolanery 16:c26d8e007df5 175 flash_led (1, 1, 1, 0);
kolanery 16:c26d8e007df5 176 }
kolanery 16:c26d8e007df5 177
kolanery 16:c26d8e007df5 178
kolanery 16:c26d8e007df5 179
kolanery 16:c26d8e007df5 180
kolanery 16:c26d8e007df5 181 */