Mini Design Project demonstrating a Bluetooth Controlled Robot

Dependencies:   Motor WavePlayer_HelloWorld4180 mbed

Committer:
jlogreira3
Date:
Tue Mar 15 18:20:53 2016 +0000
Revision:
0:a4708667f84e
dfgdsfg

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jlogreira3 0:a4708667f84e 1 #include "mbed.h"
jlogreira3 0:a4708667f84e 2 #include "wave_player.h"
jlogreira3 0:a4708667f84e 3 #include "SDFileSystem.h"
jlogreira3 0:a4708667f84e 4 #include "Motor.h"
jlogreira3 0:a4708667f84e 5 #include "RGBLed.h"
jlogreira3 0:a4708667f84e 6
jlogreira3 0:a4708667f84e 7
jlogreira3 0:a4708667f84e 8 Motor motorA(p26, p11, p12); // pwm, fwd, rev
jlogreira3 0:a4708667f84e 9 Motor motorB(p25, p13, p14); // pwm, fwd, rev
jlogreira3 0:a4708667f84e 10
jlogreira3 0:a4708667f84e 11 // Setup RGB led using PWM pins and class
jlogreira3 0:a4708667f84e 12 RGBLed myRGBled(p22,p23,p24); //red, green, blue PWM pins
jlogreira3 0:a4708667f84e 13
jlogreira3 0:a4708667f84e 14 // Setup to play wav file from SD Card
jlogreira3 0:a4708667f84e 15 AnalogOut DACout(p18);
jlogreira3 0:a4708667f84e 16 wave_player waver(&DACout);
jlogreira3 0:a4708667f84e 17 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
jlogreira3 0:a4708667f84e 18
jlogreira3 0:a4708667f84e 19 // Setup for bluetooth
jlogreira3 0:a4708667f84e 20 Serial blue(p28,p27);
jlogreira3 0:a4708667f84e 21 BusOut myled(LED1,LED2,LED3,LED4);
jlogreira3 0:a4708667f84e 22
jlogreira3 0:a4708667f84e 23 //also setting any unused analog input pins to digital outputs reduces A/D noise a bit
jlogreira3 0:a4708667f84e 24 //see http://mbed.org/users/chris/notebook/Getting-best-ADC-performance/
jlogreira3 0:a4708667f84e 25 DigitalOut P16(p16);
jlogreira3 0:a4708667f84e 26 DigitalOut P17(p17);
jlogreira3 0:a4708667f84e 27 DigitalOut P19(p19);
jlogreira3 0:a4708667f84e 28 DigitalOut P20(p20);
jlogreira3 0:a4708667f84e 29
jlogreira3 0:a4708667f84e 30 void playSound(char * wav)
jlogreira3 0:a4708667f84e 31 {
jlogreira3 0:a4708667f84e 32 // need to change code to use threads to play the wav file while avoiding disrupting continuous code flow
jlogreira3 0:a4708667f84e 33 // open wav file
jlogreira3 0:a4708667f84e 34 FILE *wave_file;
jlogreira3 0:a4708667f84e 35 wave_file = fopen(wav,"r");
jlogreira3 0:a4708667f84e 36
jlogreira3 0:a4708667f84e 37 // play wav file
jlogreira3 0:a4708667f84e 38 waver.play(wave_file);
jlogreira3 0:a4708667f84e 39
jlogreira3 0:a4708667f84e 40 // close wav file
jlogreira3 0:a4708667f84e 41 fclose(wave_file);
jlogreira3 0:a4708667f84e 42 }
jlogreira3 0:a4708667f84e 43
jlogreira3 0:a4708667f84e 44
jlogreira3 0:a4708667f84e 45 int main()
jlogreira3 0:a4708667f84e 46 {
jlogreira3 0:a4708667f84e 47 float motorSpeed = 0.0;
jlogreira3 0:a4708667f84e 48 char bnum = 0;
jlogreira3 0:a4708667f84e 49 char bhit = 0;
jlogreira3 0:a4708667f84e 50 while(1)
jlogreira3 0:a4708667f84e 51 {
jlogreira3 0:a4708667f84e 52 motorA.speed(motorSpeed);
jlogreira3 0:a4708667f84e 53 motorB.speed(motorSpeed);
jlogreira3 0:a4708667f84e 54 if (blue.getc() == '!') {
jlogreira3 0:a4708667f84e 55 if (blue.getc() == 'B') { //button data packet
jlogreira3 0:a4708667f84e 56 bnum = blue.getc(); //button number
jlogreira3 0:a4708667f84e 57 bhit = blue.getc(); //1=hit, 0=release
jlogreira3 0:a4708667f84e 58 if (blue.getc() == char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
jlogreira3 0:a4708667f84e 59 myled = bnum - '1'; //current button number will appear on LEDs
jlogreira3 0:a4708667f84e 60 switch (bnum) {
jlogreira3 0:a4708667f84e 61 case '1': //number button 1
jlogreira3 0:a4708667f84e 62 if (bhit=='1') {
jlogreira3 0:a4708667f84e 63 //add hit code here
jlogreira3 0:a4708667f84e 64 motorSpeed += 0.2; // speed up
jlogreira3 0:a4708667f84e 65 myRGBled.write(0.0,1.0,0.0); //green
jlogreira3 0:a4708667f84e 66 } else {
jlogreira3 0:a4708667f84e 67 //add release code here
jlogreira3 0:a4708667f84e 68 }
jlogreira3 0:a4708667f84e 69 break;
jlogreira3 0:a4708667f84e 70 case '2': //number button 2
jlogreira3 0:a4708667f84e 71 if (bhit=='1') {
jlogreira3 0:a4708667f84e 72 //add hit code here
jlogreira3 0:a4708667f84e 73 } else {
jlogreira3 0:a4708667f84e 74 //add release code here
jlogreira3 0:a4708667f84e 75 motorSpeed -= 0.2; // slow down
jlogreira3 0:a4708667f84e 76 myRGBled.write(0.0,0.0,1.0); //blue
jlogreira3 0:a4708667f84e 77 }
jlogreira3 0:a4708667f84e 78 break;
jlogreira3 0:a4708667f84e 79 case '3': //number button 3
jlogreira3 0:a4708667f84e 80 if (bhit=='1') {
jlogreira3 0:a4708667f84e 81 //add hit code here
jlogreira3 0:a4708667f84e 82 } else {
jlogreira3 0:a4708667f84e 83 //add release code here
jlogreira3 0:a4708667f84e 84 motorSpeed = 0.0;
jlogreira3 0:a4708667f84e 85 myRGBled.write(1.0,0.0,0.0); //red
jlogreira3 0:a4708667f84e 86 }
jlogreira3 0:a4708667f84e 87 break;
jlogreira3 0:a4708667f84e 88 case '4': //number button 4
jlogreira3 0:a4708667f84e 89 if (bhit=='1') {
jlogreira3 0:a4708667f84e 90 //add hit code here
jlogreira3 0:a4708667f84e 91 myRGBled.write(0.5,0.5,0.5); //white
jlogreira3 0:a4708667f84e 92
jlogreira3 0:a4708667f84e 93 } else {
jlogreira3 0:a4708667f84e 94 //add release code here
jlogreira3 0:a4708667f84e 95 playSound("/sd/myWavFiles/CarHornHonk.wav");
jlogreira3 0:a4708667f84e 96 }
jlogreira3 0:a4708667f84e 97 break;
jlogreira3 0:a4708667f84e 98 case '5': //button 5 up arrow
jlogreira3 0:a4708667f84e 99 if (bhit=='1') {
jlogreira3 0:a4708667f84e 100 //add hit code here
jlogreira3 0:a4708667f84e 101 motorSpeed = 0.5; // speed up
jlogreira3 0:a4708667f84e 102 myRGBled.write(0.0,1.0,1.0); // teal
jlogreira3 0:a4708667f84e 103 } else {
jlogreira3 0:a4708667f84e 104 //add release code here
jlogreira3 0:a4708667f84e 105 }
jlogreira3 0:a4708667f84e 106 break;
jlogreira3 0:a4708667f84e 107 case '6': //button 6 down arrow
jlogreira3 0:a4708667f84e 108 if (bhit=='1') {
jlogreira3 0:a4708667f84e 109 //add hit code here
jlogreira3 0:a4708667f84e 110 motorSpeed = -0.5; // speed up
jlogreira3 0:a4708667f84e 111 myRGBled.write(1.0,0.1,0.0); //orange
jlogreira3 0:a4708667f84e 112 } else {
jlogreira3 0:a4708667f84e 113 //add release code here
jlogreira3 0:a4708667f84e 114 }
jlogreira3 0:a4708667f84e 115 break;
jlogreira3 0:a4708667f84e 116 case '7': //button 7 left arrow
jlogreira3 0:a4708667f84e 117 if (bhit=='1') {
jlogreira3 0:a4708667f84e 118 //add hit code here
jlogreira3 0:a4708667f84e 119 myRGBled.write(0.3,0.0,0.6); // purple
jlogreira3 0:a4708667f84e 120 motorA.speed(-1.0);
jlogreira3 0:a4708667f84e 121 motorB.speed(1.0);
jlogreira3 0:a4708667f84e 122 wait(1);
jlogreira3 0:a4708667f84e 123 } else {
jlogreira3 0:a4708667f84e 124 //add release code here
jlogreira3 0:a4708667f84e 125 }
jlogreira3 0:a4708667f84e 126 break;
jlogreira3 0:a4708667f84e 127 case '8': //button 8 right arrow
jlogreira3 0:a4708667f84e 128 if (bhit=='1') {
jlogreira3 0:a4708667f84e 129 //add hit code here
jlogreira3 0:a4708667f84e 130 myRGBled.write(1.0,0.0,0.2); // pink
jlogreira3 0:a4708667f84e 131 motorA.speed(1.0);
jlogreira3 0:a4708667f84e 132 motorB.speed(-1.0);
jlogreira3 0:a4708667f84e 133 wait(1);
jlogreira3 0:a4708667f84e 134 } else {
jlogreira3 0:a4708667f84e 135 //add release code here
jlogreira3 0:a4708667f84e 136 }
jlogreira3 0:a4708667f84e 137 break;
jlogreira3 0:a4708667f84e 138 default:
jlogreira3 0:a4708667f84e 139 break;
jlogreira3 0:a4708667f84e 140 }
jlogreira3 0:a4708667f84e 141 }
jlogreira3 0:a4708667f84e 142 }
jlogreira3 0:a4708667f84e 143 }
jlogreira3 0:a4708667f84e 144 }
jlogreira3 0:a4708667f84e 145 }
jlogreira3 0:a4708667f84e 146
jlogreira3 0:a4708667f84e 147