Sonar Proximity Audio Alert for Robot
Dependencies: HC_SR04_Ultrasonic_Library Motor mbed-rtos mbed
Fork of rtos_basic by
main.cpp@12:42d63181dbdb, 2017-03-13 (annotated)
- Committer:
- juubs
- Date:
- Mon Mar 13 18:35:56 2017 +0000
- Revision:
- 12:42d63181dbdb
- Parent:
- 11:0309bef74ba8
Lab 4 Final
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emilmont | 1:491820ee784d | 1 | #include "mbed.h" |
juubs | 12:42d63181dbdb | 2 | #include "Speaker.h" |
juubs | 12:42d63181dbdb | 3 | #include "ultrasonic.h" |
juubs | 12:42d63181dbdb | 4 | #include "Motor.h" |
mbed_official | 11:0309bef74ba8 | 5 | #include "rtos.h" |
juubs | 12:42d63181dbdb | 6 | |
juubs | 12:42d63181dbdb | 7 | RawSerial pc(USBTX, USBRX); |
juubs | 12:42d63181dbdb | 8 | RawSerial bluetooth(p28, p27); |
juubs | 12:42d63181dbdb | 9 | Motor leftWheel(p21, p20, p19); |
juubs | 12:42d63181dbdb | 10 | Motor rightWheel(p22, p15, p14); |
juubs | 12:42d63181dbdb | 11 | Speaker speaker(p23); |
juubs | 12:42d63181dbdb | 12 | |
juubs | 12:42d63181dbdb | 13 | float speed = .5; |
juubs | 12:42d63181dbdb | 14 | |
juubs | 12:42d63181dbdb | 15 | void bluetooth_thread(void const *args) { |
juubs | 12:42d63181dbdb | 16 | char cmd, bhit, bnum; |
juubs | 12:42d63181dbdb | 17 | while(true) { |
juubs | 12:42d63181dbdb | 18 | if (bluetooth.getc() == '!') { |
juubs | 12:42d63181dbdb | 19 | cmd = bluetooth.getc(); |
juubs | 12:42d63181dbdb | 20 | switch (cmd) { |
juubs | 12:42d63181dbdb | 21 | case 'B': // button press |
juubs | 12:42d63181dbdb | 22 | bnum = bluetooth.getc(); |
juubs | 12:42d63181dbdb | 23 | bhit = bluetooth.getc(); |
juubs | 12:42d63181dbdb | 24 | if (bluetooth.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum |
juubs | 12:42d63181dbdb | 25 | switch (bnum) { |
juubs | 12:42d63181dbdb | 26 | case '1': |
juubs | 12:42d63181dbdb | 27 | speed = 1; |
juubs | 12:42d63181dbdb | 28 | break; |
juubs | 12:42d63181dbdb | 29 | case '2': |
juubs | 12:42d63181dbdb | 30 | speed = .75; |
juubs | 12:42d63181dbdb | 31 | break; |
juubs | 12:42d63181dbdb | 32 | case '3': |
juubs | 12:42d63181dbdb | 33 | speed = .5; |
juubs | 12:42d63181dbdb | 34 | break; |
juubs | 12:42d63181dbdb | 35 | case '4': |
juubs | 12:42d63181dbdb | 36 | speed = .25; |
juubs | 12:42d63181dbdb | 37 | break; |
juubs | 12:42d63181dbdb | 38 | case '5': //up |
juubs | 12:42d63181dbdb | 39 | if (bhit == '1') { |
juubs | 12:42d63181dbdb | 40 | leftWheel.speed(speed); |
juubs | 12:42d63181dbdb | 41 | rightWheel.speed(speed); |
juubs | 12:42d63181dbdb | 42 | } else { |
juubs | 12:42d63181dbdb | 43 | leftWheel.speed(0); |
juubs | 12:42d63181dbdb | 44 | rightWheel.speed(0); |
juubs | 12:42d63181dbdb | 45 | } |
juubs | 12:42d63181dbdb | 46 | break; |
juubs | 12:42d63181dbdb | 47 | case '6': //down |
juubs | 12:42d63181dbdb | 48 | if (bhit == '1') { |
juubs | 12:42d63181dbdb | 49 | leftWheel.speed(-1 * speed); |
juubs | 12:42d63181dbdb | 50 | rightWheel.speed(-1 * speed); |
juubs | 12:42d63181dbdb | 51 | } else { |
juubs | 12:42d63181dbdb | 52 | leftWheel.speed(0); |
juubs | 12:42d63181dbdb | 53 | rightWheel.speed(0); |
juubs | 12:42d63181dbdb | 54 | } |
juubs | 12:42d63181dbdb | 55 | break; |
juubs | 12:42d63181dbdb | 56 | case '7': //left |
juubs | 12:42d63181dbdb | 57 | if (bhit == '1') { |
juubs | 12:42d63181dbdb | 58 | leftWheel.speed(-.5); |
juubs | 12:42d63181dbdb | 59 | rightWheel.speed(.5); |
juubs | 12:42d63181dbdb | 60 | } else { |
juubs | 12:42d63181dbdb | 61 | leftWheel.speed(0); |
juubs | 12:42d63181dbdb | 62 | rightWheel.speed(0); |
juubs | 12:42d63181dbdb | 63 | } |
juubs | 12:42d63181dbdb | 64 | break; |
juubs | 12:42d63181dbdb | 65 | case '8': //right |
juubs | 12:42d63181dbdb | 66 | if (bhit == '1') { |
juubs | 12:42d63181dbdb | 67 | leftWheel.speed(.5); |
juubs | 12:42d63181dbdb | 68 | rightWheel.speed(-.5); |
juubs | 12:42d63181dbdb | 69 | } else { |
juubs | 12:42d63181dbdb | 70 | leftWheel.speed(0); |
juubs | 12:42d63181dbdb | 71 | rightWheel.speed(0); |
juubs | 12:42d63181dbdb | 72 | } |
juubs | 12:42d63181dbdb | 73 | break; |
juubs | 12:42d63181dbdb | 74 | default: |
juubs | 12:42d63181dbdb | 75 | break; |
juubs | 12:42d63181dbdb | 76 | } |
juubs | 12:42d63181dbdb | 77 | } |
juubs | 12:42d63181dbdb | 78 | break; |
juubs | 12:42d63181dbdb | 79 | default: |
juubs | 12:42d63181dbdb | 80 | break; |
juubs | 12:42d63181dbdb | 81 | } |
juubs | 12:42d63181dbdb | 82 | } |
emilmont | 1:491820ee784d | 83 | } |
emilmont | 1:491820ee784d | 84 | } |
juubs | 12:42d63181dbdb | 85 | |
juubs | 12:42d63181dbdb | 86 | void dist(int distance) { |
juubs | 12:42d63181dbdb | 87 | pc.printf("Distance %d mm\r\n", distance); |
juubs | 12:42d63181dbdb | 88 | if (distance < 50) { |
juubs | 12:42d63181dbdb | 89 | speaker.PlayNote(150, 0.15, 0.5); |
juubs | 12:42d63181dbdb | 90 | } else if (distance < 100) { |
juubs | 12:42d63181dbdb | 91 | speaker.PlayNote(150, 0.25, 0.02); |
juubs | 12:42d63181dbdb | 92 | } else if (distance < 200) { |
juubs | 12:42d63181dbdb | 93 | speaker.PlayNote(150, 0.5, 0.02); |
juubs | 12:42d63181dbdb | 94 | } else if (distance < 300) { |
juubs | 12:42d63181dbdb | 95 | speaker.PlayNote(150, 0.75, 0.02); |
juubs | 12:42d63181dbdb | 96 | } |
juubs | 12:42d63181dbdb | 97 | Thread::wait(50); |
juubs | 12:42d63181dbdb | 98 | } |
juubs | 12:42d63181dbdb | 99 | |
juubs | 12:42d63181dbdb | 100 | ultrasonic sonar(p6, p7, .1, 1, &dist); |
juubs | 12:42d63181dbdb | 101 | |
emilmont | 1:491820ee784d | 102 | int main() { |
juubs | 12:42d63181dbdb | 103 | sonar.startUpdates(); |
emilmont | 1:491820ee784d | 104 | |
juubs | 12:42d63181dbdb | 105 | Thread bt_t(bluetooth_thread); |
juubs | 12:42d63181dbdb | 106 | while(1) { |
juubs | 12:42d63181dbdb | 107 | sonar.checkDistance(); |
emilmont | 1:491820ee784d | 108 | } |
emilmont | 1:491820ee784d | 109 | } |