Bluetooth Controlled Robot with Audio Feedback and Variable Speed Control

Dependencies:   Motor SDFileSystem mbed wave_player

Revision:
0:5b3fe01b3a0e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Mar 09 17:22:33 2017 +0000
@@ -0,0 +1,126 @@
+#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;
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file