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 mbed-rtos Motor HC_SR04_Ultrasonic_Library
main.cpp@0:8048099359db, 2020-11-30 (annotated)
- Committer:
- keithliang8
- Date:
- Mon Nov 30 00:22:27 2020 +0000
- Revision:
- 0:8048099359db
1
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| keithliang8 | 0:8048099359db | 1 | #include "mbed.h" |
| keithliang8 | 0:8048099359db | 2 | //#include "wave_player.h" |
| keithliang8 | 0:8048099359db | 3 | //#include "SDFileSystem.h" |
| keithliang8 | 0:8048099359db | 4 | #include "Motor.h" |
| keithliang8 | 0:8048099359db | 5 | #include "rtos.h" |
| keithliang8 | 0:8048099359db | 6 | //#include "RGBLed.h" |
| keithliang8 | 0:8048099359db | 7 | #include "ultrasonic.h" |
| keithliang8 | 0:8048099359db | 8 | #include "Speaker.h" |
| keithliang8 | 0:8048099359db | 9 | Speaker speak(p26); //Speaker |
| keithliang8 | 0:8048099359db | 10 | Serial blue(p28,p27); //Bluetooth Module |
| keithliang8 | 0:8048099359db | 11 | Motor A(p21, p5, p13); // pwm, fwd, rev, can brake Back Left |
| keithliang8 | 0:8048099359db | 12 | Motor B(p22, p14, p8); // pwm, fwd, rev, can brake Back Right |
| keithliang8 | 0:8048099359db | 13 | Motor C(p23, p11, p12); // pwm, fwd, rev, can brake Front Right |
| keithliang8 | 0:8048099359db | 14 | Motor D(p24, p9, p10); // pwm, fwd, rev, can brake Front Left |
| keithliang8 | 0:8048099359db | 15 | DigitalOut myled(LED2); |
| keithliang8 | 0:8048099359db | 16 | //AnalogOut DACout(p18); |
| keithliang8 | 0:8048099359db | 17 | //wave_player waver(&DACout); |
| keithliang8 | 0:8048099359db | 18 | float RmotorSpeed = 0.0; |
| keithliang8 | 0:8048099359db | 19 | float LmotorSpeed = 0.0; |
| keithliang8 | 0:8048099359db | 20 | |
| keithliang8 | 0:8048099359db | 21 | int triggerDist = 300; |
| keithliang8 | 0:8048099359db | 22 | |
| keithliang8 | 0:8048099359db | 23 | void dist(int distance) |
| keithliang8 | 0:8048099359db | 24 | { |
| keithliang8 | 0:8048099359db | 25 | if(distance <= triggerDist) { |
| keithliang8 | 0:8048099359db | 26 | RmotorSpeed = 0.0; |
| keithliang8 | 0:8048099359db | 27 | LmotorSpeed = 0.0; |
| keithliang8 | 0:8048099359db | 28 | A.speed(LmotorSpeed); |
| keithliang8 | 0:8048099359db | 29 | B.speed(RmotorSpeed); |
| keithliang8 | 0:8048099359db | 30 | C.speed(RmotorSpeed); |
| keithliang8 | 0:8048099359db | 31 | D.speed(LmotorSpeed); |
| keithliang8 | 0:8048099359db | 32 | speak.PlayNote(500.0, 2, 0.2); |
| keithliang8 | 0:8048099359db | 33 | } |
| keithliang8 | 0:8048099359db | 34 | } |
| keithliang8 | 0:8048099359db | 35 | ultrasonic mu(p6, p7, .1, 1, &dist); |
| keithliang8 | 0:8048099359db | 36 | |
| keithliang8 | 0:8048099359db | 37 | void startSonar(void const* argument){ |
| keithliang8 | 0:8048099359db | 38 | mu.startUpdates(); |
| keithliang8 | 0:8048099359db | 39 | while(1) { |
| keithliang8 | 0:8048099359db | 40 | mu.checkDistance(); |
| keithliang8 | 0:8048099359db | 41 | Thread::wait(50); |
| keithliang8 | 0:8048099359db | 42 | } |
| keithliang8 | 0:8048099359db | 43 | } |
| keithliang8 | 0:8048099359db | 44 | |
| keithliang8 | 0:8048099359db | 45 | void turnRight(){ |
| keithliang8 | 0:8048099359db | 46 | A.speed(0.5); |
| keithliang8 | 0:8048099359db | 47 | B.speed(-0.5); |
| keithliang8 | 0:8048099359db | 48 | C.speed(-0.5); |
| keithliang8 | 0:8048099359db | 49 | D.speed(0.5); |
| keithliang8 | 0:8048099359db | 50 | wait(1.05); |
| keithliang8 | 0:8048099359db | 51 | A.speed(0); |
| keithliang8 | 0:8048099359db | 52 | B.speed(0); |
| keithliang8 | 0:8048099359db | 53 | C.speed(0); |
| keithliang8 | 0:8048099359db | 54 | D.speed(0); |
| keithliang8 | 0:8048099359db | 55 | } |
| keithliang8 | 0:8048099359db | 56 | void turnLeft(){ |
| keithliang8 | 0:8048099359db | 57 | A.speed(-0.5); |
| keithliang8 | 0:8048099359db | 58 | B.speed(0.5); |
| keithliang8 | 0:8048099359db | 59 | C.speed(0.5); |
| keithliang8 | 0:8048099359db | 60 | D.speed(-0.5); |
| keithliang8 | 0:8048099359db | 61 | wait(1.2); |
| keithliang8 | 0:8048099359db | 62 | A.speed(0); |
| keithliang8 | 0:8048099359db | 63 | B.speed(0); |
| keithliang8 | 0:8048099359db | 64 | C.speed(0); |
| keithliang8 | 0:8048099359db | 65 | D.speed(0); |
| keithliang8 | 0:8048099359db | 66 | } |
| keithliang8 | 0:8048099359db | 67 | |
| keithliang8 | 0:8048099359db | 68 | int main() |
| keithliang8 | 0:8048099359db | 69 | { |
| keithliang8 | 0:8048099359db | 70 | Thread thread1(startSonar); |
| keithliang8 | 0:8048099359db | 71 | |
| keithliang8 | 0:8048099359db | 72 | char bnum = 0; |
| keithliang8 | 0:8048099359db | 73 | char bhit = 0; |
| keithliang8 | 0:8048099359db | 74 | while(1) |
| keithliang8 | 0:8048099359db | 75 | { |
| keithliang8 | 0:8048099359db | 76 | |
| keithliang8 | 0:8048099359db | 77 | A.speed(LmotorSpeed); |
| keithliang8 | 0:8048099359db | 78 | B.speed(RmotorSpeed); |
| keithliang8 | 0:8048099359db | 79 | C.speed(RmotorSpeed); |
| keithliang8 | 0:8048099359db | 80 | D.speed(LmotorSpeed); |
| keithliang8 | 0:8048099359db | 81 | |
| keithliang8 | 0:8048099359db | 82 | if (blue.getc() == '!') { |
| keithliang8 | 0:8048099359db | 83 | char cmd = blue.getc(); |
| keithliang8 | 0:8048099359db | 84 | if (cmd == 'B') { //button data packet |
| keithliang8 | 0:8048099359db | 85 | bnum = blue.getc(); //button number |
| keithliang8 | 0:8048099359db | 86 | bhit = blue.getc(); //1=hit, 0=release |
| keithliang8 | 0:8048099359db | 87 | if (blue.getc() == char(~('!' + 'B' + bnum + bhit))) { //checksum OK? |
| keithliang8 | 0:8048099359db | 88 | switch (bnum) { |
| keithliang8 | 0:8048099359db | 89 | case '1': //number button 1 |
| keithliang8 | 0:8048099359db | 90 | if (bhit=='1') { |
| keithliang8 | 0:8048099359db | 91 | //add hit code here |
| keithliang8 | 0:8048099359db | 92 | RmotorSpeed += 0.2; |
| keithliang8 | 0:8048099359db | 93 | LmotorSpeed += 0.2; // speed up |
| keithliang8 | 0:8048099359db | 94 | } else { |
| keithliang8 | 0:8048099359db | 95 | //add release code here |
| keithliang8 | 0:8048099359db | 96 | } |
| keithliang8 | 0:8048099359db | 97 | break; |
| keithliang8 | 0:8048099359db | 98 | case '2': //number button 2 |
| keithliang8 | 0:8048099359db | 99 | if (bhit=='1') { |
| keithliang8 | 0:8048099359db | 100 | //add hit code here |
| keithliang8 | 0:8048099359db | 101 | } else { |
| keithliang8 | 0:8048099359db | 102 | //add release code here |
| keithliang8 | 0:8048099359db | 103 | LmotorSpeed -= 0.2; |
| keithliang8 | 0:8048099359db | 104 | RmotorSpeed -= 0.2;// slow down |
| keithliang8 | 0:8048099359db | 105 | } |
| keithliang8 | 0:8048099359db | 106 | break; |
| keithliang8 | 0:8048099359db | 107 | case '3': //number button 3 |
| keithliang8 | 0:8048099359db | 108 | if (bhit=='1') { |
| keithliang8 | 0:8048099359db | 109 | //add hit code here |
| keithliang8 | 0:8048099359db | 110 | } else { |
| keithliang8 | 0:8048099359db | 111 | //add release code here |
| keithliang8 | 0:8048099359db | 112 | LmotorSpeed = 0.0; |
| keithliang8 | 0:8048099359db | 113 | RmotorSpeed = 0.0; |
| keithliang8 | 0:8048099359db | 114 | } |
| keithliang8 | 0:8048099359db | 115 | break; |
| keithliang8 | 0:8048099359db | 116 | case '4': //number button 4 |
| keithliang8 | 0:8048099359db | 117 | if (bhit=='1') { |
| keithliang8 | 0:8048099359db | 118 | speak.PlayNote(969.0, .2, 0.2); |
| keithliang8 | 0:8048099359db | 119 | } else { |
| keithliang8 | 0:8048099359db | 120 | //add release code here |
| keithliang8 | 0:8048099359db | 121 | |
| keithliang8 | 0:8048099359db | 122 | } |
| keithliang8 | 0:8048099359db | 123 | break; |
| keithliang8 | 0:8048099359db | 124 | case '5': //button 5 up arrow |
| keithliang8 | 0:8048099359db | 125 | if (bhit=='1') { |
| keithliang8 | 0:8048099359db | 126 | if(LmotorSpeed > 0 && RmotorSpeed > 0) { |
| keithliang8 | 0:8048099359db | 127 | } |
| keithliang8 | 0:8048099359db | 128 | else if(LmotorSpeed <= 0 && RmotorSpeed <= 0) { |
| keithliang8 | 0:8048099359db | 129 | LmotorSpeed = 0.4; |
| keithliang8 | 0:8048099359db | 130 | RmotorSpeed = 0.4; |
| keithliang8 | 0:8048099359db | 131 | } |
| keithliang8 | 0:8048099359db | 132 | } else { |
| keithliang8 | 0:8048099359db | 133 | //add release code here |
| keithliang8 | 0:8048099359db | 134 | } |
| keithliang8 | 0:8048099359db | 135 | break; |
| keithliang8 | 0:8048099359db | 136 | case '6': //button 6 down arrow |
| keithliang8 | 0:8048099359db | 137 | if (bhit=='1') { |
| keithliang8 | 0:8048099359db | 138 | if(LmotorSpeed < 0 && RmotorSpeed < 0) { |
| keithliang8 | 0:8048099359db | 139 | |
| keithliang8 | 0:8048099359db | 140 | } |
| keithliang8 | 0:8048099359db | 141 | else if(LmotorSpeed >= 0 && RmotorSpeed >= 0) { |
| keithliang8 | 0:8048099359db | 142 | LmotorSpeed = -0.4; |
| keithliang8 | 0:8048099359db | 143 | RmotorSpeed = -0.4; |
| keithliang8 | 0:8048099359db | 144 | } |
| keithliang8 | 0:8048099359db | 145 | } else { |
| keithliang8 | 0:8048099359db | 146 | //add release code here |
| keithliang8 | 0:8048099359db | 147 | } |
| keithliang8 | 0:8048099359db | 148 | break; |
| keithliang8 | 0:8048099359db | 149 | case '7': //button 7 left arrow |
| keithliang8 | 0:8048099359db | 150 | if (bhit=='1') { |
| keithliang8 | 0:8048099359db | 151 | LmotorSpeed = 0.25*RmotorSpeed; |
| keithliang8 | 0:8048099359db | 152 | } else { |
| keithliang8 | 0:8048099359db | 153 | //add release code here |
| keithliang8 | 0:8048099359db | 154 | } |
| keithliang8 | 0:8048099359db | 155 | break; |
| keithliang8 | 0:8048099359db | 156 | case '8': //button 8 right arrow |
| keithliang8 | 0:8048099359db | 157 | if (bhit=='1') { |
| keithliang8 | 0:8048099359db | 158 | RmotorSpeed = 0.25*LmotorSpeed; |
| keithliang8 | 0:8048099359db | 159 | } else { |
| keithliang8 | 0:8048099359db | 160 | //add release code here |
| keithliang8 | 0:8048099359db | 161 | } |
| keithliang8 | 0:8048099359db | 162 | break; |
| keithliang8 | 0:8048099359db | 163 | default: |
| keithliang8 | 0:8048099359db | 164 | break; |
| keithliang8 | 0:8048099359db | 165 | } |
| keithliang8 | 0:8048099359db | 166 | } |
| keithliang8 | 0:8048099359db | 167 | } |
| keithliang8 | 0:8048099359db | 168 | else if (cmd == 'X') { |
| keithliang8 | 0:8048099359db | 169 | char first = blue.getc(); |
| keithliang8 | 0:8048099359db | 170 | char second = blue.getc(); |
| keithliang8 | 0:8048099359db | 171 | char comma = blue.getc(); |
| keithliang8 | 0:8048099359db | 172 | char third = blue.getc(); |
| keithliang8 | 0:8048099359db | 173 | char fourth = blue.getc(); |
| keithliang8 | 0:8048099359db | 174 | int secondnum = second - '0'; |
| keithliang8 | 0:8048099359db | 175 | float xdist = secondnum * .75; |
| keithliang8 | 0:8048099359db | 176 | int fourthnum = fourth - '0'; |
| keithliang8 | 0:8048099359db | 177 | float ydist = fourthnum * .75; |
| keithliang8 | 0:8048099359db | 178 | if(third == '+'){ |
| keithliang8 | 0:8048099359db | 179 | A.speed(0.5); |
| keithliang8 | 0:8048099359db | 180 | B.speed(0.5); |
| keithliang8 | 0:8048099359db | 181 | C.speed(0.5); |
| keithliang8 | 0:8048099359db | 182 | D.speed(0.5); |
| keithliang8 | 0:8048099359db | 183 | wait(ydist); |
| keithliang8 | 0:8048099359db | 184 | A.speed(0); |
| keithliang8 | 0:8048099359db | 185 | B.speed(0); |
| keithliang8 | 0:8048099359db | 186 | C.speed(0); |
| keithliang8 | 0:8048099359db | 187 | D.speed(0); |
| keithliang8 | 0:8048099359db | 188 | } |
| keithliang8 | 0:8048099359db | 189 | else if(third == '-'){ |
| keithliang8 | 0:8048099359db | 190 | A.speed(-0.5); |
| keithliang8 | 0:8048099359db | 191 | B.speed(-0.5); |
| keithliang8 | 0:8048099359db | 192 | C.speed(-0.5); |
| keithliang8 | 0:8048099359db | 193 | D.speed(-0.5); |
| keithliang8 | 0:8048099359db | 194 | wait(ydist); |
| keithliang8 | 0:8048099359db | 195 | A.speed(0); |
| keithliang8 | 0:8048099359db | 196 | B.speed(0); |
| keithliang8 | 0:8048099359db | 197 | C.speed(0); |
| keithliang8 | 0:8048099359db | 198 | D.speed(0); |
| keithliang8 | 0:8048099359db | 199 | } |
| keithliang8 | 0:8048099359db | 200 | if(first == '+'){ |
| keithliang8 | 0:8048099359db | 201 | turnRight(); |
| keithliang8 | 0:8048099359db | 202 | A.speed(0.5); |
| keithliang8 | 0:8048099359db | 203 | B.speed(0.5); |
| keithliang8 | 0:8048099359db | 204 | C.speed(0.5); |
| keithliang8 | 0:8048099359db | 205 | D.speed(0.5); |
| keithliang8 | 0:8048099359db | 206 | wait(xdist); |
| keithliang8 | 0:8048099359db | 207 | A.speed(0); |
| keithliang8 | 0:8048099359db | 208 | B.speed(0); |
| keithliang8 | 0:8048099359db | 209 | C.speed(0); |
| keithliang8 | 0:8048099359db | 210 | D.speed(0); |
| keithliang8 | 0:8048099359db | 211 | } |
| keithliang8 | 0:8048099359db | 212 | else if(first == '-'){ |
| keithliang8 | 0:8048099359db | 213 | turnLeft(); |
| keithliang8 | 0:8048099359db | 214 | A.speed(0.5); |
| keithliang8 | 0:8048099359db | 215 | B.speed(0.5); |
| keithliang8 | 0:8048099359db | 216 | C.speed(0.5); |
| keithliang8 | 0:8048099359db | 217 | D.speed(0.5); |
| keithliang8 | 0:8048099359db | 218 | wait(xdist); |
| keithliang8 | 0:8048099359db | 219 | A.speed(0); |
| keithliang8 | 0:8048099359db | 220 | B.speed(0); |
| keithliang8 | 0:8048099359db | 221 | C.speed(0); |
| keithliang8 | 0:8048099359db | 222 | D.speed(0); } |
| keithliang8 | 0:8048099359db | 223 | |
| keithliang8 | 0:8048099359db | 224 | } |
| keithliang8 | 0:8048099359db | 225 | } |
| keithliang8 | 0:8048099359db | 226 | } |
| keithliang8 | 0:8048099359db | 227 | } |