Mini Design Project demonstrating a Bluetooth Controlled Robot
Dependencies: Motor WavePlayer_HelloWorld4180 mbed
main.cpp@0:a4708667f84e, 2016-03-15 (annotated)
- Committer:
- jlogreira3
- Date:
- Tue Mar 15 18:20:53 2016 +0000
- Revision:
- 0:a4708667f84e
dfgdsfg
Who changed what in which revision?
User | Revision | Line number | New 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 |