Bluetooth Controlled Robot with Audio Feedback and Variable Speed Control

Dependencies:   Motor SDFileSystem mbed wave_player

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "SDFileSystem.h"
00003 #include "wave_player.h"
00004 #include "Motor.h"
00005 
00006 DigitalOut led1(LED1);
00007 DigitalOut led2(LED2);
00008 DigitalOut led3(LED3);
00009 DigitalOut led4(LED4);
00010 
00011 Serial blue(p28,p27);
00012 
00013 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
00014 AnalogOut DACout(p18);
00015 wave_player waver(&DACout);
00016 FILE *wave_file;
00017 
00018 Motor A(p21, p20, p19);  //pwm, inB, inA
00019 Motor B(p22, p17, p16); //pwm, inA, inB
00020 float speed = 0.5f;
00021 float speed1 = 0.25f;
00022 float speed2 = 0.50f;
00023 float speed3 = 0.75f;
00024 float speed4 = 1.0f;
00025 
00026 int main()
00027 {
00028     char bnum=0;
00029     char bhit=0;
00030     while(1) {
00031         if (blue.getc()=='!') {
00032             if (blue.getc()=='B') { //button data packet
00033                 bnum = blue.getc(); //button number
00034                 bhit = blue.getc(); //1=hit, 0=release
00035                 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
00036                     //myled = bnum - '0'; //current button number will appear on LEDs
00037                     switch (bnum) {
00038                         case '1': //number button 1
00039                             if (bhit=='1') {
00040                                 speed = speed1;
00041                             } else {
00042                                 //add release code here
00043                             }
00044                             break;
00045                         case '2': //number button 2
00046                             if (bhit=='1') {
00047                                 speed = speed2;
00048                             } else {
00049                                 //add release code here
00050                             }
00051                             break;
00052                         case '3': //number button 3
00053                             if (bhit=='1') {
00054                                 speed = speed3;
00055                             } else {
00056                                 //add release code here
00057                             }
00058                             break;
00059                         case '4': //number button 4
00060                             if (bhit=='1') {
00061                                 speed = speed4;
00062                             } else {
00063                                 //add release code here
00064                             }
00065                             break;
00066                         case '5': //button 5 up arrow
00067                             if (bhit=='1') {
00068                                 led1=!led1;
00069                                 A.speed(speed);
00070                                 B.speed(speed);
00071                                 wave_file=fopen("/sd/upbeep.wav","r");
00072                                 waver.play(wave_file);
00073                                 fclose(wave_file);
00074                             } else {
00075                                 led1=!led1;
00076                                 A.speed(0.0f);
00077                                 B.speed(0.0f);
00078                             }
00079                             break;
00080                         case '6': //button 6 down arrow
00081                             if (bhit=='1') {
00082                                 A.speed(-speed);
00083                                 B.speed(-speed);
00084                                 wave_file=fopen("/sd/downbeep.wav","r");
00085                                 waver.play(wave_file);
00086                                 fclose(wave_file);
00087                             } else {
00088                                 led2=!led2;
00089                                 A.speed(0.0f);
00090                                 B.speed(0.0f);
00091                             }
00092                             break;
00093                         case '7': //button 7 left arrow
00094                             if (bhit=='1') {
00095                                 A.speed(speed);
00096                                 B.speed(-speed);
00097                                 wave_file=fopen("/sd/leftbeep.wav","r");
00098                                 waver.play(wave_file);
00099                                 fclose(wave_file);
00100                             } else {
00101                                 led3=!led3;
00102                                 A.speed(0.0f);
00103                                 B.speed(0.0f);
00104                             }
00105                             break;
00106                         case '8': //button 8 right arrow
00107                             if (bhit=='1') {
00108                                 A.speed(-speed);
00109                                 B.speed(speed);
00110                                 wave_file=fopen("/sd/rightbeep.wav","r");
00111                                 waver.play(wave_file);
00112                                 fclose(wave_file);
00113                             } else {
00114                                 led4=!led4;
00115                                 A.speed(0.0f);
00116                                 B.speed(0.0f);
00117                             }
00118                             break;
00119                         default:
00120                             break;
00121                     }
00122                 }
00123             }
00124         }
00125     }
00126 }