Complete Build

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

Fork of BotWithBluetoothLIDARV2 by Brandon Weiner and Carlos Tallard

main.cpp

Committer:
bdragon52
Date:
2017-11-16
Revision:
16:61e88b0e3689
Parent:
15:c8360ceaad61
Child:
17:2c6549be1ecb

File content as of revision 16:61e88b0e3689:


#include "mbed.h"
#include "Motor.h"
#include "rtos.h"

#include "SDFileSystem.h"
SDFileSystem sd(p5, p6, p7, p29, "sd");


#include "wave_player.h"
AnalogOut DACout(p18);
wave_player waver(&DACout);



//BusOut myled(LED1,LED2,LED3,LED4);
#include "XNucleo53L0A1.h"
#include <stdio.h>
Serial pc(USBTX,USBRX);
DigitalOut shdn(p26);
//I2C sensor pins
#define VL53L0_I2C_SDA   p28
#define VL53L0_I2C_SCL   p27
static XNucleo53L0A1 *board=NULL;
DigitalOut myled (LED2);
Serial blue(p9,p10);
Motor RW(p22, p13, p12); // pwm, fwd, rev
Motor LW(p21, p8, p11); // pwm, fwd, rev
Thread lidar;
Thread siren;
uint32_t distance;
FILE *wave_file;



void t3(){

    while(1){
   
    wave_file=fopen("/sd/Bee Gees - Stayin' Alive.wav","r");
    waver.play(wave_file);
    fclose(wave_file);
    Thread::wait(50);
}
}

void t2() {
    
    int status;
    DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
    /* creates the 53L0A1 expansion board singleton obj */
    board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
    shdn = 0; //must reset sensor for an mbed reset to work
    Thread::wait(100);
    shdn = 1;
    Thread::wait(100);
    /* init the 53L0A1 board with default values */
    status = board->init_board();
    while (status) {
        pc.printf("Failed to init board! \r\n");
        status = board->init_board();
    }
    //loop taking and printing distance
    
    bool speakerOn=false;
    
    while (1) {
        status = board->sensor_centre->get_distance(&distance);
        if (status == VL53L0X_ERROR_NONE) {
            //pc.printf("D=%ld mm\r\n", distance);
        }
    
    //LIDAR checks
    
   /* if(speakerOn==false && distance<=100) //thread start sound, speakerOn=true;
    if(speakerOn==true && distance<=100) //certain volume 
    if(speakerOn==true && distance<50) //higher volume;
    if(distance>100) //thread stop, speakerOn==false;
   */ 
    //siren.start(t3);
    myled=!myled;
    Thread::wait(500);
    }
    
    }





int main()
{
    myled=0;
    //lidar.start(t2);
    //siren.start(t3);
    char bnum=0;
    char bhit=0;
    while(1) {
         
    if(blue.readable()==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') {
                                RW.speed(1);
                                //add hit code here
                            } else {
                                //add release code here
                            }
                            break;
                        case '2': //number button 2
                            if (bhit=='1') {
                                RW.speed(0);
                                LW.speed(0);
                                //add hit code here
                            } else {
                                //add release code here
                            }
                            break;
                        case '3': //number button 3
                            if (bhit=='1') {
                                //add hit code here
                            } else {
                                //add release code here
                            }
                            break;
                        case '4': //number button 4
                            if (bhit=='1') {
                                //add hit code here
                            } else {
                                //add release code here
                            }
                            break;
                        case '5': //button 5 up arrow
                            if (bhit=='1') {
                                //add hit code here
                                
                                 RW.speed(1.0);
                                 LW.speed(1.0);  
                                
                            } else {
                                
                                   LW.speed(0); 
                                  RW.speed(0); 
                                //add release code here
                            }
                            break;
                        case '6': //button 6 down arrow
                            if (bhit=='1') {
                                 RW.speed(-1.0);
                                 LW.speed(-1.0);  
                                //add hit code here
                            } else {
                                RW.speed(0);
                                 LW.speed(0);
                                //add release code here
                            }
                            break;
                        case '7': //button 7 left arrow
                            if (bhit=='1') {
                                RW.speed(1);
                                 LW.speed(-1);
                                //add hit code here
                            } else {
                                
                                RW.speed(0);
                                 LW.speed(0);
                                //add release code here
                            }
                            break;
                        case '8': //button 8 right arrow
                            if (bhit=='1') {
                                RW.speed(-1);
                                 LW.speed(1);
                                //add hit code here
                            } else {
                                RW.speed(0);
                                 LW.speed(0);
                                //add release code here
                            }
                            break;
                        default:
                            break;
                    }
                    }
                    }
                }
          
            }
           
            Thread::yield();
            
        }
    
   }