Lab 4 Mini Project: Bluetooth Controlled Robot with Variable Speed and Audio Feedback
BLUETOOTH CONTROLLED ROBOT WITH VARIABLE SPEED AND AUDIO FEEDBACK
Project Description:
A two wheeled robot controlled by Bluetooth via a Adafruit LE UART Friend chip and a phone with the respective app. A user can control the direction of the robot by the controller pad on the
Pin Layouts:

Audio Amp:
Bluetooth:
H-Bridge
GND ..................................................... gnd
Motor leads ........................................ A01, A02, B01, B02
PWMA ................................................. p21
PWMB ................................................. p20
AIN1 .................................................... p19
AIN2 .................................................... p20
BIN1 .................................................... p17
BIN2 .................................................... p16
Code:
Bluetooth Controlled Robot with Variable Speed and Audio Feedback
#include "mbed.h"
#include "SDFileSystem.h"
#include "wave_player.h"
#include "Motor.h"
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
Serial blue(p28,p27);
SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
AnalogOut DACout(p18);
wave_player waver(&DACout);
FILE *wave_file;
Motor A(p21, p20, p19); //pwm, inB, inA
Motor B(p22, p17, p16); //pwm, inA, inB
float speed = 0.5f;
float speed1 = 0.25f;
float speed2 = 0.50f;
float speed3 = 0.75f;
float speed4 = 1.0f;
int main()
{
char bnum=0;
char bhit=0;
while(1) {
if (blue.getc()=='!') {
if (blue.getc()=='B') { //button data packet
bnum = blue.getc(); //button number
bhit = blue.getc(); //1=hit, 0=release
if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
//myled = bnum - '0'; //current button number will appear on LEDs
switch (bnum) {
case '1': //number button 1
if (bhit=='1') {
speed = speed1;
} else {
//add release code here
}
break;
case '2': //number button 2
if (bhit=='1') {
speed = speed2;
} else {
//add release code here
}
break;
case '3': //number button 3
if (bhit=='1') {
speed = speed3;
} else {
//add release code here
}
break;
case '4': //number button 4
if (bhit=='1') {
speed = speed4;
} else {
//add release code here
}
break;
case '5': //button 5 up arrow
if (bhit=='1') {
led1=!led1;
A.speed(speed);
B.speed(speed);
wave_file=fopen("/sd/upbeep.wav","r");
waver.play(wave_file);
fclose(wave_file);
} else {
led1=!led1;
A.speed(0.0f);
B.speed(0.0f);
}
break;
case '6': //button 6 down arrow
if (bhit=='1') {
A.speed(-speed);
B.speed(-speed);
wave_file=fopen("/sd/downbeep.wav","r");
waver.play(wave_file);
fclose(wave_file);
} else {
led2=!led2;
A.speed(0.0f);
B.speed(0.0f);
}
break;
case '7': //button 7 left arrow
if (bhit=='1') {
A.speed(speed);
B.speed(-speed);
wave_file=fopen("/sd/leftbeep.wav","r");
waver.play(wave_file);
fclose(wave_file);
} else {
led3=!led3;
A.speed(0.0f);
B.speed(0.0f);
}
break;
case '8': //button 8 right arrow
if (bhit=='1') {
A.speed(-speed);
B.speed(speed);
wave_file=fopen("/sd/rightbeep.wav","r");
waver.play(wave_file);
fclose(wave_file);
} else {
led4=!led4;
A.speed(0.0f);
B.speed(0.0f);
}
break;
default:
break;
}
}
}
}
}
}
Video Demo:
Please log in to post comments.
