Sonar Proximity Audio Alert for Robot

Dependencies:   HC_SR04_Ultrasonic_Library Motor mbed-rtos mbed

Fork of rtos_basic by mbed official

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?

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