Mini Design Project demonstrating a Bluetooth Controlled Robot

Dependencies:   Motor WavePlayer_HelloWorld4180 mbed

Files at this revision

API Documentation at this revision

Comitter:
jlogreira3
Date:
Tue Mar 15 18:20:53 2016 +0000
Commit message:
dfgdsfg

Changed in this revision

Motor.lib Show annotated file Show diff for this revision Revisions of this file
RGBLed.h Show annotated file Show diff for this revision Revisions of this file
WavePlayer_HelloWorld.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Motor.lib	Tue Mar 15 18:20:53 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/simon/code/Motor/#f265e441bcd9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RGBLed.h	Tue Mar 15 18:20:53 2016 +0000
@@ -0,0 +1,27 @@
+#include "mbed.h"
+
+//Class to control an RGB LED using three PWM pins
+class RGBLed
+{
+public:
+    RGBLed(PinName redpin, PinName greenpin, PinName bluepin);
+    void write(float red,float green, float blue);
+private:
+    PwmOut _redpin;
+    PwmOut _greenpin;
+    PwmOut _bluepin;
+};
+ 
+RGBLed::RGBLed (PinName redpin, PinName greenpin, PinName bluepin)
+    : _redpin(redpin), _greenpin(greenpin), _bluepin(bluepin)
+{
+    //50Hz PWM clock default a bit too low, go to 2000Hz (less flicker)
+    _redpin.period(0.0005);
+}
+ 
+void RGBLed::write(float red,float green, float blue)
+{
+    _redpin = red;
+    _greenpin = green;
+    _bluepin = blue;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WavePlayer_HelloWorld.lib	Tue Mar 15 18:20:53 2016 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/jlogreira3/code/WavePlayer_HelloWorld4180/#f27cbf739ab0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Mar 15 18:20:53 2016 +0000
@@ -0,0 +1,147 @@
+#include "mbed.h"
+#include "wave_player.h"
+#include "SDFileSystem.h"
+#include "Motor.h"
+#include "RGBLed.h"
+
+
+Motor motorA(p26, p11, p12); // pwm, fwd, rev
+Motor motorB(p25, p13, p14); // pwm, fwd, rev
+
+// Setup RGB led using PWM pins and class
+RGBLed myRGBled(p22,p23,p24); //red, green, blue PWM pins
+
+// Setup to play wav file from SD Card
+AnalogOut DACout(p18);
+wave_player waver(&DACout);
+SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
+
+// Setup for bluetooth
+Serial blue(p28,p27);
+BusOut myled(LED1,LED2,LED3,LED4);
+
+//also setting any unused analog input pins to digital outputs reduces A/D noise a bit
+//see http://mbed.org/users/chris/notebook/Getting-best-ADC-performance/
+DigitalOut P16(p16);
+DigitalOut P17(p17);
+DigitalOut P19(p19);
+DigitalOut P20(p20);
+
+void playSound(char * wav)
+{
+    // need to change code to use threads to play the wav file while avoiding disrupting continuous code flow
+    // open wav file
+    FILE *wave_file;
+    wave_file = fopen(wav,"r");
+
+    // play wav file
+    waver.play(wave_file);
+
+    // close wav file
+    fclose(wave_file);
+}
+
+
+int main()
+{
+    float motorSpeed = 0.0;
+    char bnum = 0;
+    char bhit = 0;
+    while(1) 
+    {
+        motorA.speed(motorSpeed);
+        motorB.speed(motorSpeed);
+        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 - '1'; //current button number will appear on LEDs
+                    switch (bnum) {
+                        case '1': //number button 1
+                            if (bhit=='1') {
+                                //add hit code here
+                                motorSpeed += 0.2; // speed up
+                                myRGBled.write(0.0,1.0,0.0); //green
+                            } else {
+                                //add release code here
+                            }
+                            break;
+                        case '2': //number button 2
+                            if (bhit=='1') {
+                                //add hit code here
+                            } else {
+                                //add release code here
+                                motorSpeed -= 0.2; // slow down
+                                myRGBled.write(0.0,0.0,1.0); //blue
+                            }
+                            break;
+                        case '3': //number button 3
+                            if (bhit=='1') {
+                                //add hit code here
+                            } else {
+                                //add release code here
+                                motorSpeed = 0.0;
+                                myRGBled.write(1.0,0.0,0.0); //red
+                            }
+                            break;
+                        case '4': //number button 4
+                            if (bhit=='1') {
+                                //add hit code here
+                                myRGBled.write(0.5,0.5,0.5); //white
+
+                            } else {
+                                //add release code here
+                                playSound("/sd/myWavFiles/CarHornHonk.wav");  
+                            }
+                            break;
+                        case '5': //button 5 up arrow
+                            if (bhit=='1') {
+                                //add hit code here
+                                motorSpeed = 0.5; // speed up
+                                myRGBled.write(0.0,1.0,1.0); // teal
+                            } else {
+                                //add release code here
+                            }
+                            break;
+                        case '6': //button 6 down arrow
+                            if (bhit=='1') {
+                                //add hit code here
+                                motorSpeed = -0.5; // speed up
+                                myRGBled.write(1.0,0.1,0.0); //orange
+                            } else {
+                                //add release code here
+                            }
+                            break;
+                        case '7': //button 7 left arrow
+                            if (bhit=='1') {
+                                //add hit code here
+                                myRGBled.write(0.3,0.0,0.6); // purple
+                                motorA.speed(-1.0);
+                                motorB.speed(1.0);
+                                wait(1);
+                            } else {
+                                //add release code here
+                            }
+                            break;
+                        case '8': //button 8 right arrow
+                            if (bhit=='1') {
+                                //add hit code here
+                                myRGBled.write(1.0,0.0,0.2); // pink
+                                motorA.speed(1.0);
+                                motorB.speed(-1.0);
+                                wait(1);
+                            } else {
+                                //add release code here
+                            }
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            }
+        }
+    }
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Mar 15 18:20:53 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/87f2f5183dfb
\ No newline at end of file