Sonar Proximity Audio Alert for Robot
Dependencies: HC_SR04_Ultrasonic_Library Motor mbed-rtos mbed
Fork of rtos_basic by
main.cpp
- Committer:
- juubs
- Date:
- 2017-03-13
- Revision:
- 12:42d63181dbdb
- Parent:
- 11:0309bef74ba8
File content as of revision 12:42d63181dbdb:
#include "mbed.h"
#include "Speaker.h"
#include "ultrasonic.h"
#include "Motor.h"
#include "rtos.h"
RawSerial pc(USBTX, USBRX);
RawSerial bluetooth(p28, p27);
Motor leftWheel(p21, p20, p19);
Motor rightWheel(p22, p15, p14);
Speaker speaker(p23);
float speed = .5;
void bluetooth_thread(void const *args) {
char cmd, bhit, bnum;
while(true) {
if (bluetooth.getc() == '!') {
cmd = bluetooth.getc();
switch (cmd) {
case 'B': // button press
bnum = bluetooth.getc();
bhit = bluetooth.getc();
if (bluetooth.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum
switch (bnum) {
case '1':
speed = 1;
break;
case '2':
speed = .75;
break;
case '3':
speed = .5;
break;
case '4':
speed = .25;
break;
case '5': //up
if (bhit == '1') {
leftWheel.speed(speed);
rightWheel.speed(speed);
} else {
leftWheel.speed(0);
rightWheel.speed(0);
}
break;
case '6': //down
if (bhit == '1') {
leftWheel.speed(-1 * speed);
rightWheel.speed(-1 * speed);
} else {
leftWheel.speed(0);
rightWheel.speed(0);
}
break;
case '7': //left
if (bhit == '1') {
leftWheel.speed(-.5);
rightWheel.speed(.5);
} else {
leftWheel.speed(0);
rightWheel.speed(0);
}
break;
case '8': //right
if (bhit == '1') {
leftWheel.speed(.5);
rightWheel.speed(-.5);
} else {
leftWheel.speed(0);
rightWheel.speed(0);
}
break;
default:
break;
}
}
break;
default:
break;
}
}
}
}
void dist(int distance) {
pc.printf("Distance %d mm\r\n", distance);
if (distance < 50) {
speaker.PlayNote(150, 0.15, 0.5);
} else if (distance < 100) {
speaker.PlayNote(150, 0.25, 0.02);
} else if (distance < 200) {
speaker.PlayNote(150, 0.5, 0.02);
} else if (distance < 300) {
speaker.PlayNote(150, 0.75, 0.02);
}
Thread::wait(50);
}
ultrasonic sonar(p6, p7, .1, 1, &dist);
int main() {
sonar.startUpdates();
Thread bt_t(bluetooth_thread);
while(1) {
sonar.checkDistance();
}
}
