Testing

Dependencies:   mbed mbed-rtos 4DGL-uLCD-SE Motor BNO055 SDFileSystem HC_SR04_Ultrasonic_Library

Committer:
elisham11
Date:
Thu Nov 28 02:02:03 2019 +0000
Revision:
0:d2f4489d6f31
Testing for documentation

Who changed what in which revision?

UserRevisionLine numberNew 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 }