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

/media/uploads/brogers33/controlpad.jpg

/media/uploads/brogers33/17230197_10155229061797722_2026534956_o.jpg

Pin Layouts:

/media/uploads/brogers33/sd.png

Audio Amp: /media/uploads/brogers33/audioamp.png

Bluetooth: /media/uploads/brogers33/bluetooth.png

H-Bridge /media/uploads/brogers33/hbridge.png 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.