Testing
Dependencies: mbed mbed-rtos 4DGL-uLCD-SE Motor BNO055 SDFileSystem HC_SR04_Ultrasonic_Library
main.cpp@0:d2f4489d6f31, 2019-11-28 (annotated)
- Committer:
- elisham11
- Date:
- Thu Nov 28 02:02:03 2019 +0000
- Revision:
- 0:d2f4489d6f31
Testing for documentation
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
elisham11 | 0:d2f4489d6f31 | 1 | #include "mbed.h" |
elisham11 | 0:d2f4489d6f31 | 2 | #include "rtos.h" //mbed's thread and mutex are included here |
elisham11 | 0:d2f4489d6f31 | 3 | #include <string> |
elisham11 | 0:d2f4489d6f31 | 4 | #include "SDFileSystem.h" |
elisham11 | 0:d2f4489d6f31 | 5 | #include "Motor.h" |
elisham11 | 0:d2f4489d6f31 | 6 | #include "BNO055.h" |
elisham11 | 0:d2f4489d6f31 | 7 | #include "ultrasonic.h" |
elisham11 | 0:d2f4489d6f31 | 8 | |
elisham11 | 0:d2f4489d6f31 | 9 | //Timer |
elisham11 | 0:d2f4489d6f31 | 10 | Timer t; //t.start(), t.stop(), t.read() |
elisham11 | 0:d2f4489d6f31 | 11 | |
elisham11 | 0:d2f4489d6f31 | 12 | //Semaphore s(1); |
elisham11 | 0:d2f4489d6f31 | 13 | DigitalOut led1(LED1); |
elisham11 | 0:d2f4489d6f31 | 14 | DigitalOut led2(LED2); |
elisham11 | 0:d2f4489d6f31 | 15 | DigitalOut led3(LED3); |
elisham11 | 0:d2f4489d6f31 | 16 | DigitalOut led4(LED4); |
elisham11 | 0:d2f4489d6f31 | 17 | |
elisham11 | 0:d2f4489d6f31 | 18 | //H-bridge |
elisham11 | 0:d2f4489d6f31 | 19 | Motor m_left(p21, p15, p16); // pwm,fwd,rev pwmA |
elisham11 | 0:d2f4489d6f31 | 20 | Motor m_right(p22, p19, p20); // pwm,fwd,rev |
elisham11 | 0:d2f4489d6f31 | 21 | |
elisham11 | 0:d2f4489d6f31 | 22 | //SDcard |
elisham11 | 0:d2f4489d6f31 | 23 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
elisham11 | 0:d2f4489d6f31 | 24 | |
elisham11 | 0:d2f4489d6f31 | 25 | //Sonar 1 & 2 |
elisham11 | 0:d2f4489d6f31 | 26 | //void newdist(); |
elisham11 | 0:d2f4489d6f31 | 27 | //ultrasonic mu1(p29, p30, .07, 1, &newdist); |
elisham11 | 0:d2f4489d6f31 | 28 | //ultrasonic mu2(p11, p12, .07, 1, &newdist); |
elisham11 | 0:d2f4489d6f31 | 29 | |
elisham11 | 0:d2f4489d6f31 | 30 | //Bluetooth |
elisham11 | 0:d2f4489d6f31 | 31 | // don't forgot to use mutex and volatile |
elisham11 | 0:d2f4489d6f31 | 32 | //RawSerial pc(USBTX, USBRX); |
elisham11 | 0:d2f4489d6f31 | 33 | /* |
elisham11 | 0:d2f4489d6f31 | 34 | 1 for imu rotation |
elisham11 | 0:d2f4489d6f31 | 35 | 2 for reverse |
elisham11 | 0:d2f4489d6f31 | 36 | 3 for forward |
elisham11 | 0:d2f4489d6f31 | 37 | 4 for left |
elisham11 | 0:d2f4489d6f31 | 38 | 5 for right |
elisham11 | 0:d2f4489d6f31 | 39 | */ |
elisham11 | 0:d2f4489d6f31 | 40 | Serial pc(USBTX, USBRX); |
elisham11 | 0:d2f4489d6f31 | 41 | RawSerial Bluetooth(p28,p27); |
elisham11 | 0:d2f4489d6f31 | 42 | |
elisham11 | 0:d2f4489d6f31 | 43 | //Global variables for bluetooth control |
elisham11 | 0:d2f4489d6f31 | 44 | bool sonarOn = false; //Indicates when sonar is taking measurements |
elisham11 | 0:d2f4489d6f31 | 45 | bool running = true; //Keeps main while loop going |
elisham11 | 0:d2f4489d6f31 | 46 | |
elisham11 | 0:d2f4489d6f31 | 47 | |
elisham11 | 0:d2f4489d6f31 | 48 | |
elisham11 | 0:d2f4489d6f31 | 49 | //Code for interrupt routine for Bluetooth input |
elisham11 | 0:d2f4489d6f31 | 50 | enum statetype {start = 0, got_exclm, got_B, got_one, got_two, got_three, got_five, got_six, got_seven, got_eight, got_11, got_21, got_31, got_51, got_61, got_71, got_81}; |
elisham11 | 0:d2f4489d6f31 | 51 | statetype state = start; |
elisham11 | 0:d2f4489d6f31 | 52 | //Interrupt routine to parse message with one new character per serial RX interrupt |
elisham11 | 0:d2f4489d6f31 | 53 | void parse_message() |
elisham11 | 0:d2f4489d6f31 | 54 | { |
elisham11 | 0:d2f4489d6f31 | 55 | led1 = !led1; |
elisham11 | 0:d2f4489d6f31 | 56 | switch (state) |
elisham11 | 0:d2f4489d6f31 | 57 | { |
elisham11 | 0:d2f4489d6f31 | 58 | case start: |
elisham11 | 0:d2f4489d6f31 | 59 | if (Bluetooth.getc()=='!') |
elisham11 | 0:d2f4489d6f31 | 60 | { |
elisham11 | 0:d2f4489d6f31 | 61 | led2 = 1; |
elisham11 | 0:d2f4489d6f31 | 62 | state = got_exclm; |
elisham11 | 0:d2f4489d6f31 | 63 | } |
elisham11 | 0:d2f4489d6f31 | 64 | else state = start; |
elisham11 | 0:d2f4489d6f31 | 65 | break; |
elisham11 | 0:d2f4489d6f31 | 66 | case got_exclm: |
elisham11 | 0:d2f4489d6f31 | 67 | |
elisham11 | 0:d2f4489d6f31 | 68 | if (Bluetooth.getc() == 'B') |
elisham11 | 0:d2f4489d6f31 | 69 | { |
elisham11 | 0:d2f4489d6f31 | 70 | led3 = 1; |
elisham11 | 0:d2f4489d6f31 | 71 | state = got_B; |
elisham11 | 0:d2f4489d6f31 | 72 | } |
elisham11 | 0:d2f4489d6f31 | 73 | else state = start; |
elisham11 | 0:d2f4489d6f31 | 74 | break; |
elisham11 | 0:d2f4489d6f31 | 75 | case got_B: |
elisham11 | 0:d2f4489d6f31 | 76 | { |
elisham11 | 0:d2f4489d6f31 | 77 | char recv = Bluetooth.getc(); |
elisham11 | 0:d2f4489d6f31 | 78 | if (recv == '1') state = got_one; |
elisham11 | 0:d2f4489d6f31 | 79 | else if (recv == '2') state = got_two; |
elisham11 | 0:d2f4489d6f31 | 80 | else if (recv == '3') state = got_three; |
elisham11 | 0:d2f4489d6f31 | 81 | else if (recv == '5') state = got_five; |
elisham11 | 0:d2f4489d6f31 | 82 | else if (recv == '6') state = got_six; |
elisham11 | 0:d2f4489d6f31 | 83 | else if (recv == '7') state = got_seven; |
elisham11 | 0:d2f4489d6f31 | 84 | else if (recv == '8') state = got_eight; |
elisham11 | 0:d2f4489d6f31 | 85 | else state = start; |
elisham11 | 0:d2f4489d6f31 | 86 | } |
elisham11 | 0:d2f4489d6f31 | 87 | break; |
elisham11 | 0:d2f4489d6f31 | 88 | case got_one: |
elisham11 | 0:d2f4489d6f31 | 89 | if (Bluetooth.getc() == '1') |
elisham11 | 0:d2f4489d6f31 | 90 | { |
elisham11 | 0:d2f4489d6f31 | 91 | |
elisham11 | 0:d2f4489d6f31 | 92 | } |
elisham11 | 0:d2f4489d6f31 | 93 | else state = start; |
elisham11 | 0:d2f4489d6f31 | 94 | break; |
elisham11 | 0:d2f4489d6f31 | 95 | case got_two: //Stop everything |
elisham11 | 0:d2f4489d6f31 | 96 | if (Bluetooth.getc() == '1') |
elisham11 | 0:d2f4489d6f31 | 97 | { |
elisham11 | 0:d2f4489d6f31 | 98 | //Make sure motors are stopped |
elisham11 | 0:d2f4489d6f31 | 99 | m_left.speed(0.0); |
elisham11 | 0:d2f4489d6f31 | 100 | m_right.speed(0.0); |
elisham11 | 0:d2f4489d6f31 | 101 | sonarOn = false; |
elisham11 | 0:d2f4489d6f31 | 102 | running = false; |
elisham11 | 0:d2f4489d6f31 | 103 | } |
elisham11 | 0:d2f4489d6f31 | 104 | else state = start; |
elisham11 | 0:d2f4489d6f31 | 105 | break; |
elisham11 | 0:d2f4489d6f31 | 106 | case got_three: //currently unimplemented |
elisham11 | 0:d2f4489d6f31 | 107 | if (Bluetooth.getc() == '1') |
elisham11 | 0:d2f4489d6f31 | 108 | { |
elisham11 | 0:d2f4489d6f31 | 109 | |
elisham11 | 0:d2f4489d6f31 | 110 | } |
elisham11 | 0:d2f4489d6f31 | 111 | else state = start; |
elisham11 | 0:d2f4489d6f31 | 112 | break; |
elisham11 | 0:d2f4489d6f31 | 113 | case got_five: //up arrow pressed |
elisham11 | 0:d2f4489d6f31 | 114 | { |
elisham11 | 0:d2f4489d6f31 | 115 | char recv = Bluetooth.getc(); |
elisham11 | 0:d2f4489d6f31 | 116 | if (recv == '1') //Button pressed or held |
elisham11 | 0:d2f4489d6f31 | 117 | { |
elisham11 | 0:d2f4489d6f31 | 118 | sonarOn = true; |
elisham11 | 0:d2f4489d6f31 | 119 | m_left.speed(0.3); |
elisham11 | 0:d2f4489d6f31 | 120 | m_right.speed(0.3); |
elisham11 | 0:d2f4489d6f31 | 121 | led3 = 1; |
elisham11 | 0:d2f4489d6f31 | 122 | } |
elisham11 | 0:d2f4489d6f31 | 123 | else if (recv == '0') //Button released |
elisham11 | 0:d2f4489d6f31 | 124 | { |
elisham11 | 0:d2f4489d6f31 | 125 | sonarOn = false; |
elisham11 | 0:d2f4489d6f31 | 126 | m_left.speed(0.0); |
elisham11 | 0:d2f4489d6f31 | 127 | m_right.speed(0.0); |
elisham11 | 0:d2f4489d6f31 | 128 | led4 = 1; |
elisham11 | 0:d2f4489d6f31 | 129 | } |
elisham11 | 0:d2f4489d6f31 | 130 | else state = start; |
elisham11 | 0:d2f4489d6f31 | 131 | } |
elisham11 | 0:d2f4489d6f31 | 132 | break; |
elisham11 | 0:d2f4489d6f31 | 133 | case got_six: //down arrow pressed |
elisham11 | 0:d2f4489d6f31 | 134 | { |
elisham11 | 0:d2f4489d6f31 | 135 | char recv = Bluetooth.getc(); |
elisham11 | 0:d2f4489d6f31 | 136 | if (recv == '1') //Button pressed or held |
elisham11 | 0:d2f4489d6f31 | 137 | { |
elisham11 | 0:d2f4489d6f31 | 138 | sonarOn = true; |
elisham11 | 0:d2f4489d6f31 | 139 | m_left.speed(-0.3); |
elisham11 | 0:d2f4489d6f31 | 140 | m_right.speed(-0.3); |
elisham11 | 0:d2f4489d6f31 | 141 | } |
elisham11 | 0:d2f4489d6f31 | 142 | else if (recv == '0') |
elisham11 | 0:d2f4489d6f31 | 143 | { |
elisham11 | 0:d2f4489d6f31 | 144 | sonarOn = false; |
elisham11 | 0:d2f4489d6f31 | 145 | m_left.speed(0.0); |
elisham11 | 0:d2f4489d6f31 | 146 | m_right.speed(0.0); |
elisham11 | 0:d2f4489d6f31 | 147 | } |
elisham11 | 0:d2f4489d6f31 | 148 | else state = start; |
elisham11 | 0:d2f4489d6f31 | 149 | } |
elisham11 | 0:d2f4489d6f31 | 150 | break; |
elisham11 | 0:d2f4489d6f31 | 151 | case got_seven: //turn left |
elisham11 | 0:d2f4489d6f31 | 152 | { |
elisham11 | 0:d2f4489d6f31 | 153 | char recv = Bluetooth.getc(); |
elisham11 | 0:d2f4489d6f31 | 154 | sonarOn = false; |
elisham11 | 0:d2f4489d6f31 | 155 | if (recv == '1') |
elisham11 | 0:d2f4489d6f31 | 156 | { |
elisham11 | 0:d2f4489d6f31 | 157 | m_left.speed(-0.3); |
elisham11 | 0:d2f4489d6f31 | 158 | m_right.speed(0.3); |
elisham11 | 0:d2f4489d6f31 | 159 | } |
elisham11 | 0:d2f4489d6f31 | 160 | else if (recv == '0') |
elisham11 | 0:d2f4489d6f31 | 161 | { |
elisham11 | 0:d2f4489d6f31 | 162 | m_left.speed(0.0); |
elisham11 | 0:d2f4489d6f31 | 163 | m_right.speed(0.0); |
elisham11 | 0:d2f4489d6f31 | 164 | } |
elisham11 | 0:d2f4489d6f31 | 165 | else state = start; |
elisham11 | 0:d2f4489d6f31 | 166 | } |
elisham11 | 0:d2f4489d6f31 | 167 | break; |
elisham11 | 0:d2f4489d6f31 | 168 | case got_eight: //turn right |
elisham11 | 0:d2f4489d6f31 | 169 | { |
elisham11 | 0:d2f4489d6f31 | 170 | char recv = Bluetooth.getc(); |
elisham11 | 0:d2f4489d6f31 | 171 | sonarOn = false; |
elisham11 | 0:d2f4489d6f31 | 172 | if (recv == '1') |
elisham11 | 0:d2f4489d6f31 | 173 | { |
elisham11 | 0:d2f4489d6f31 | 174 | m_left.speed(0.3); |
elisham11 | 0:d2f4489d6f31 | 175 | m_right.speed(-0.3); |
elisham11 | 0:d2f4489d6f31 | 176 | } |
elisham11 | 0:d2f4489d6f31 | 177 | else if (recv == '0') |
elisham11 | 0:d2f4489d6f31 | 178 | { |
elisham11 | 0:d2f4489d6f31 | 179 | m_left.speed(0.0); |
elisham11 | 0:d2f4489d6f31 | 180 | m_right.speed(0.0); |
elisham11 | 0:d2f4489d6f31 | 181 | } |
elisham11 | 0:d2f4489d6f31 | 182 | else state = start; |
elisham11 | 0:d2f4489d6f31 | 183 | } |
elisham11 | 0:d2f4489d6f31 | 184 | break; |
elisham11 | 0:d2f4489d6f31 | 185 | |
elisham11 | 0:d2f4489d6f31 | 186 | default: |
elisham11 | 0:d2f4489d6f31 | 187 | Bluetooth.getc(); |
elisham11 | 0:d2f4489d6f31 | 188 | state = start; |
elisham11 | 0:d2f4489d6f31 | 189 | } |
elisham11 | 0:d2f4489d6f31 | 190 | } |
elisham11 | 0:d2f4489d6f31 | 191 | |
elisham11 | 0:d2f4489d6f31 | 192 | |
elisham11 | 0:d2f4489d6f31 | 193 | //phototransistor and IC |
elisham11 | 0:d2f4489d6f31 | 194 | |
elisham11 | 0:d2f4489d6f31 | 195 | |
elisham11 | 0:d2f4489d6f31 | 196 | |
elisham11 | 0:d2f4489d6f31 | 197 | |
elisham11 | 0:d2f4489d6f31 | 198 | |
elisham11 | 0:d2f4489d6f31 | 199 | //Function to run in thread for speaker music |
elisham11 | 0:d2f4489d6f31 | 200 | |
elisham11 | 0:d2f4489d6f31 | 201 | |
elisham11 | 0:d2f4489d6f31 | 202 | void newDist() |
elisham11 | 0:d2f4489d6f31 | 203 | { |
elisham11 | 0:d2f4489d6f31 | 204 | |
elisham11 | 0:d2f4489d6f31 | 205 | } |
elisham11 | 0:d2f4489d6f31 | 206 | |
elisham11 | 0:d2f4489d6f31 | 207 | |
elisham11 | 0:d2f4489d6f31 | 208 | |
elisham11 | 0:d2f4489d6f31 | 209 | int main() |
elisham11 | 0:d2f4489d6f31 | 210 | { |
elisham11 | 0:d2f4489d6f31 | 211 | |
elisham11 | 0:d2f4489d6f31 | 212 | //Thread t1; |
elisham11 | 0:d2f4489d6f31 | 213 | //Thread t2; |
elisham11 | 0:d2f4489d6f31 | 214 | //Thread t3; |
elisham11 | 0:d2f4489d6f31 | 215 | //t1.set_priority(osPriorityHigh); |
elisham11 | 0:d2f4489d6f31 | 216 | //t2.set_priority(osPriorityLow); |
elisham11 | 0:d2f4489d6f31 | 217 | //t3.set_priority(osPriorityRealtime); |
elisham11 | 0:d2f4489d6f31 | 218 | |
elisham11 | 0:d2f4489d6f31 | 219 | |
elisham11 | 0:d2f4489d6f31 | 220 | //Thread t4; |
elisham11 | 0:d2f4489d6f31 | 221 | //t4.start(parse_direction); |
elisham11 | 0:d2f4489d6f31 | 222 | |
elisham11 | 0:d2f4489d6f31 | 223 | //Attach Bluetooth interrupt routine |
elisham11 | 0:d2f4489d6f31 | 224 | Bluetooth.attach(&parse_message,Serial::RxIrq); |
elisham11 | 0:d2f4489d6f31 | 225 | |
elisham11 | 0:d2f4489d6f31 | 226 | while (1) |
elisham11 | 0:d2f4489d6f31 | 227 | { |
elisham11 | 0:d2f4489d6f31 | 228 | //printf("print\t"); |
elisham11 | 0:d2f4489d6f31 | 229 | Thread::wait(1000); |
elisham11 | 0:d2f4489d6f31 | 230 | } |
elisham11 | 0:d2f4489d6f31 | 231 | |
elisham11 | 0:d2f4489d6f31 | 232 | |
elisham11 | 0:d2f4489d6f31 | 233 | |
elisham11 | 0:d2f4489d6f31 | 234 | } |