Complete Build

Dependencies:   4DGL-uLCD-SE1 Motor SDFileSystem X_NUCLEO_53L0A1 mbed-rtos mbed BotwithWavePlayerLevel

Fork of BotWithBluetoothLIDARV2 by Brandon Weiner and Carlos Tallard

Revision:
17:2c6549be1ecb
Parent:
16:61e88b0e3689
Child:
18:aa7f48962bdb
diff -r 61e88b0e3689 -r 2c6549be1ecb main.cpp
--- a/main.cpp	Thu Nov 16 16:45:51 2017 +0000
+++ b/main.cpp	Mon Nov 20 01:47:29 2017 +0000
@@ -3,6 +3,8 @@
 #include "Motor.h"
 #include "rtos.h"
 
+#define SD_DBG             1
+
 #include "SDFileSystem.h"
 SDFileSystem sd(p5, p6, p7, p29, "sd");
 
@@ -11,7 +13,7 @@
 AnalogOut DACout(p18);
 wave_player waver(&DACout);
 
-
+PwmOut speaker(p23);
 
 //BusOut myled(LED1,LED2,LED3,LED4);
 #include "XNucleo53L0A1.h"
@@ -29,18 +31,60 @@
 Thread lidar;
 Thread siren;
 uint32_t distance;
-FILE *wave_file;
+int level = 8; //Volume level is turned off
+//wave_file;
+
+void listdir(void) {
+    DIR *d;
+    struct dirent *p;
 
-
+    d = opendir("/sd");
+    if (d != NULL) {
+        while ((p = readdir(d)) != NULL) {
+            pc.printf(" - %s\r\n", p->d_name);
+        }
+    } else {
+        pc.printf("Could not open directory!\r\n");
+    }
+    closedir(d);
+}
 
 void t3(){
-
+ //  int i;
+   pc.printf("Speaker\r\n");
+   listdir();
+   //waver.set_verbosity(1);
+ //  FILE *fp = fopen("/sd/myfile2.txt", "w");
+ //  fprintf(fp, "Hello World 11/18\n");
+ //   fclose(fp);
     while(1){
-   
-    wave_file=fopen("/sd/Bee Gees - Stayin' Alive.wav","r");
+        
+        
+/* generate a 500Hz tone using PWM hardware output
+    speaker.period(1.0/500.0); // 500hz period
+    speaker =0.5; //50% duty cycle - max volume
+    wait(3);
+    speaker=0.0; // turn off audio
+    wait(2);
+ 
+// generate a short 150Hz tone using PWM hardware output
+// something like this can be used for a button click effect for feedback
+    for (i=0; i<10; i++) {
+        speaker.period(1.0/150.0); // 500hz period
+        speaker =0.25; //25% duty cycle - mid range volume
+        wait(.02);
+        speaker=0.0; // turn off audio
+        wait(0.5);
+    }
+  */ 
+   while(1){
+    FILE *wave_file=fopen("/sd/LoudSound.wav","r");
+    
     waver.play(wave_file);
+    
     fclose(wave_file);
-    Thread::wait(50);
+    //Thread::wait(50);
+    }
 }
 }
 
@@ -52,6 +96,7 @@
     board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
     shdn = 0; //must reset sensor for an mbed reset to work
     Thread::wait(100);
+    //lidar power off
     shdn = 1;
     Thread::wait(100);
     /* init the 53L0A1 board with default values */
@@ -67,7 +112,15 @@
     while (1) {
         status = board->sensor_centre->get_distance(&distance);
         if (status == VL53L0X_ERROR_NONE) {
-            //pc.printf("D=%ld mm\r\n", distance);
+            pc.printf("D=%ld mm\r\n", distance);
+            if(distance > 240) level = 8;
+            if(distance < 90) level = 0;
+            if (distance >=90 && distance <=240){
+                 int value=floor(static_cast<double>(8*(distance-90)/150));
+                 if(value >=0 && value<=8){
+                     level=value;
+                 } 
+            }
         }
     
     //LIDAR checks
@@ -90,9 +143,12 @@
 
 int main()
 {
+    char previousButton='0';
+    char current;
     myled=0;
-    //lidar.start(t2);
-    //siren.start(t3);
+    pc.printf("in main\n\r");
+    lidar.start(t2);
+    siren.start(t3);
     char bnum=0;
     char bhit=0;
     while(1) {
@@ -102,6 +158,10 @@
             if (blue.getc()=='B') { //button data packet
                 bnum = blue.getc(); //button number
                 bhit = blue.getc(); //1=hit, 0=release
+                current=bnum;  
+                //Thread::wait(250);                 
+                //pc.printf("Button Pressed %c bhit = %c PreviousButton = %c CurrentButton = %c\n\r", bnum, bhit, previousButton, current);
+                previousButton = current; 
                 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
                     //myled = bnum - '0'; //current button number will appear on LEDs
                     switch (bnum) {
@@ -163,8 +223,8 @@
                             break;
                         case '7': //button 7 left arrow
                             if (bhit=='1') {
-                                RW.speed(1);
-                                 LW.speed(-1);
+                                RW.speed(-1.0);
+                                 LW.speed(1.0);
                                 //add hit code here
                             } else {
                                 
@@ -175,8 +235,8 @@
                             break;
                         case '8': //button 8 right arrow
                             if (bhit=='1') {
-                                RW.speed(-1);
-                                 LW.speed(1);
+                                RW.speed(1.0);
+                                 LW.speed(-1.0);
                                 //add hit code here
                             } else {
                                 RW.speed(0);