Complete Build
Dependencies: 4DGL-uLCD-SE1 Motor SDFileSystem X_NUCLEO_53L0A1 mbed-rtos mbed BotwithWavePlayerLevel
Fork of BotWithBluetoothLIDARV2 by
Diff: main.cpp
- Revision:
- 17:2c6549be1ecb
- Parent:
- 16:61e88b0e3689
- Child:
- 18:aa7f48962bdb
--- 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);