Bluetooth Controlled Robot with Audio Feedback and Variable Speed Control

Dependencies:   Motor SDFileSystem mbed wave_player

Committer:
iemretep
Date:
Thu Mar 09 17:22:33 2017 +0000
Revision:
0:5b3fe01b3a0e
Bluetooth Controlled Robot with Audio Feedback and Variable Speed Control

Who changed what in which revision?

UserRevisionLine numberNew contents of line
iemretep 0:5b3fe01b3a0e 1 #include "mbed.h"
iemretep 0:5b3fe01b3a0e 2 #include "SDFileSystem.h"
iemretep 0:5b3fe01b3a0e 3 #include "wave_player.h"
iemretep 0:5b3fe01b3a0e 4 #include "Motor.h"
iemretep 0:5b3fe01b3a0e 5
iemretep 0:5b3fe01b3a0e 6 DigitalOut led1(LED1);
iemretep 0:5b3fe01b3a0e 7 DigitalOut led2(LED2);
iemretep 0:5b3fe01b3a0e 8 DigitalOut led3(LED3);
iemretep 0:5b3fe01b3a0e 9 DigitalOut led4(LED4);
iemretep 0:5b3fe01b3a0e 10
iemretep 0:5b3fe01b3a0e 11 Serial blue(p28,p27);
iemretep 0:5b3fe01b3a0e 12
iemretep 0:5b3fe01b3a0e 13 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
iemretep 0:5b3fe01b3a0e 14 AnalogOut DACout(p18);
iemretep 0:5b3fe01b3a0e 15 wave_player waver(&DACout);
iemretep 0:5b3fe01b3a0e 16 FILE *wave_file;
iemretep 0:5b3fe01b3a0e 17
iemretep 0:5b3fe01b3a0e 18 Motor A(p21, p20, p19); //pwm, inB, inA
iemretep 0:5b3fe01b3a0e 19 Motor B(p22, p17, p16); //pwm, inA, inB
iemretep 0:5b3fe01b3a0e 20 float speed = 0.5f;
iemretep 0:5b3fe01b3a0e 21 float speed1 = 0.25f;
iemretep 0:5b3fe01b3a0e 22 float speed2 = 0.50f;
iemretep 0:5b3fe01b3a0e 23 float speed3 = 0.75f;
iemretep 0:5b3fe01b3a0e 24 float speed4 = 1.0f;
iemretep 0:5b3fe01b3a0e 25
iemretep 0:5b3fe01b3a0e 26 int main()
iemretep 0:5b3fe01b3a0e 27 {
iemretep 0:5b3fe01b3a0e 28 char bnum=0;
iemretep 0:5b3fe01b3a0e 29 char bhit=0;
iemretep 0:5b3fe01b3a0e 30 while(1) {
iemretep 0:5b3fe01b3a0e 31 if (blue.getc()=='!') {
iemretep 0:5b3fe01b3a0e 32 if (blue.getc()=='B') { //button data packet
iemretep 0:5b3fe01b3a0e 33 bnum = blue.getc(); //button number
iemretep 0:5b3fe01b3a0e 34 bhit = blue.getc(); //1=hit, 0=release
iemretep 0:5b3fe01b3a0e 35 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
iemretep 0:5b3fe01b3a0e 36 //myled = bnum - '0'; //current button number will appear on LEDs
iemretep 0:5b3fe01b3a0e 37 switch (bnum) {
iemretep 0:5b3fe01b3a0e 38 case '1': //number button 1
iemretep 0:5b3fe01b3a0e 39 if (bhit=='1') {
iemretep 0:5b3fe01b3a0e 40 speed = speed1;
iemretep 0:5b3fe01b3a0e 41 } else {
iemretep 0:5b3fe01b3a0e 42 //add release code here
iemretep 0:5b3fe01b3a0e 43 }
iemretep 0:5b3fe01b3a0e 44 break;
iemretep 0:5b3fe01b3a0e 45 case '2': //number button 2
iemretep 0:5b3fe01b3a0e 46 if (bhit=='1') {
iemretep 0:5b3fe01b3a0e 47 speed = speed2;
iemretep 0:5b3fe01b3a0e 48 } else {
iemretep 0:5b3fe01b3a0e 49 //add release code here
iemretep 0:5b3fe01b3a0e 50 }
iemretep 0:5b3fe01b3a0e 51 break;
iemretep 0:5b3fe01b3a0e 52 case '3': //number button 3
iemretep 0:5b3fe01b3a0e 53 if (bhit=='1') {
iemretep 0:5b3fe01b3a0e 54 speed = speed3;
iemretep 0:5b3fe01b3a0e 55 } else {
iemretep 0:5b3fe01b3a0e 56 //add release code here
iemretep 0:5b3fe01b3a0e 57 }
iemretep 0:5b3fe01b3a0e 58 break;
iemretep 0:5b3fe01b3a0e 59 case '4': //number button 4
iemretep 0:5b3fe01b3a0e 60 if (bhit=='1') {
iemretep 0:5b3fe01b3a0e 61 speed = speed4;
iemretep 0:5b3fe01b3a0e 62 } else {
iemretep 0:5b3fe01b3a0e 63 //add release code here
iemretep 0:5b3fe01b3a0e 64 }
iemretep 0:5b3fe01b3a0e 65 break;
iemretep 0:5b3fe01b3a0e 66 case '5': //button 5 up arrow
iemretep 0:5b3fe01b3a0e 67 if (bhit=='1') {
iemretep 0:5b3fe01b3a0e 68 led1=!led1;
iemretep 0:5b3fe01b3a0e 69 A.speed(speed);
iemretep 0:5b3fe01b3a0e 70 B.speed(speed);
iemretep 0:5b3fe01b3a0e 71 wave_file=fopen("/sd/upbeep.wav","r");
iemretep 0:5b3fe01b3a0e 72 waver.play(wave_file);
iemretep 0:5b3fe01b3a0e 73 fclose(wave_file);
iemretep 0:5b3fe01b3a0e 74 } else {
iemretep 0:5b3fe01b3a0e 75 led1=!led1;
iemretep 0:5b3fe01b3a0e 76 A.speed(0.0f);
iemretep 0:5b3fe01b3a0e 77 B.speed(0.0f);
iemretep 0:5b3fe01b3a0e 78 }
iemretep 0:5b3fe01b3a0e 79 break;
iemretep 0:5b3fe01b3a0e 80 case '6': //button 6 down arrow
iemretep 0:5b3fe01b3a0e 81 if (bhit=='1') {
iemretep 0:5b3fe01b3a0e 82 A.speed(-speed);
iemretep 0:5b3fe01b3a0e 83 B.speed(-speed);
iemretep 0:5b3fe01b3a0e 84 wave_file=fopen("/sd/downbeep.wav","r");
iemretep 0:5b3fe01b3a0e 85 waver.play(wave_file);
iemretep 0:5b3fe01b3a0e 86 fclose(wave_file);
iemretep 0:5b3fe01b3a0e 87 } else {
iemretep 0:5b3fe01b3a0e 88 led2=!led2;
iemretep 0:5b3fe01b3a0e 89 A.speed(0.0f);
iemretep 0:5b3fe01b3a0e 90 B.speed(0.0f);
iemretep 0:5b3fe01b3a0e 91 }
iemretep 0:5b3fe01b3a0e 92 break;
iemretep 0:5b3fe01b3a0e 93 case '7': //button 7 left arrow
iemretep 0:5b3fe01b3a0e 94 if (bhit=='1') {
iemretep 0:5b3fe01b3a0e 95 A.speed(speed);
iemretep 0:5b3fe01b3a0e 96 B.speed(-speed);
iemretep 0:5b3fe01b3a0e 97 wave_file=fopen("/sd/leftbeep.wav","r");
iemretep 0:5b3fe01b3a0e 98 waver.play(wave_file);
iemretep 0:5b3fe01b3a0e 99 fclose(wave_file);
iemretep 0:5b3fe01b3a0e 100 } else {
iemretep 0:5b3fe01b3a0e 101 led3=!led3;
iemretep 0:5b3fe01b3a0e 102 A.speed(0.0f);
iemretep 0:5b3fe01b3a0e 103 B.speed(0.0f);
iemretep 0:5b3fe01b3a0e 104 }
iemretep 0:5b3fe01b3a0e 105 break;
iemretep 0:5b3fe01b3a0e 106 case '8': //button 8 right arrow
iemretep 0:5b3fe01b3a0e 107 if (bhit=='1') {
iemretep 0:5b3fe01b3a0e 108 A.speed(-speed);
iemretep 0:5b3fe01b3a0e 109 B.speed(speed);
iemretep 0:5b3fe01b3a0e 110 wave_file=fopen("/sd/rightbeep.wav","r");
iemretep 0:5b3fe01b3a0e 111 waver.play(wave_file);
iemretep 0:5b3fe01b3a0e 112 fclose(wave_file);
iemretep 0:5b3fe01b3a0e 113 } else {
iemretep 0:5b3fe01b3a0e 114 led4=!led4;
iemretep 0:5b3fe01b3a0e 115 A.speed(0.0f);
iemretep 0:5b3fe01b3a0e 116 B.speed(0.0f);
iemretep 0:5b3fe01b3a0e 117 }
iemretep 0:5b3fe01b3a0e 118 break;
iemretep 0:5b3fe01b3a0e 119 default:
iemretep 0:5b3fe01b3a0e 120 break;
iemretep 0:5b3fe01b3a0e 121 }
iemretep 0:5b3fe01b3a0e 122 }
iemretep 0:5b3fe01b3a0e 123 }
iemretep 0:5b3fe01b3a0e 124 }
iemretep 0:5b3fe01b3a0e 125 }
iemretep 0:5b3fe01b3a0e 126 }