Complete Build

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

Fork of BotWithBluetoothLIDARV2 by Brandon Weiner and Carlos Tallard

Committer:
bdragon52
Date:
Thu Nov 16 16:45:51 2017 +0000
Revision:
16:61e88b0e3689
Parent:
15:c8360ceaad61
Child:
17:2c6549be1ecb
Bot with Lidar

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bdragon52 16:61e88b0e3689 1
emilmont 1:491820ee784d 2 #include "mbed.h"
bdragon52 16:61e88b0e3689 3 #include "Motor.h"
mbed_official 11:0309bef74ba8 4 #include "rtos.h"
bdragon52 12:af37c8938aaf 5
bdragon52 16:61e88b0e3689 6 #include "SDFileSystem.h"
bdragon52 16:61e88b0e3689 7 SDFileSystem sd(p5, p6, p7, p29, "sd");
bdragon52 12:af37c8938aaf 8
bdragon52 16:61e88b0e3689 9
bdragon52 16:61e88b0e3689 10 #include "wave_player.h"
bdragon52 12:af37c8938aaf 11 AnalogOut DACout(p18);
bdragon52 12:af37c8938aaf 12 wave_player waver(&DACout);
bdragon52 16:61e88b0e3689 13
bdragon52 15:c8360ceaad61 14
bdragon52 15:c8360ceaad61 15
bdragon52 16:61e88b0e3689 16 //BusOut myled(LED1,LED2,LED3,LED4);
bdragon52 16:61e88b0e3689 17 #include "XNucleo53L0A1.h"
bdragon52 16:61e88b0e3689 18 #include <stdio.h>
bdragon52 16:61e88b0e3689 19 Serial pc(USBTX,USBRX);
bdragon52 16:61e88b0e3689 20 DigitalOut shdn(p26);
bdragon52 16:61e88b0e3689 21 //I2C sensor pins
bdragon52 16:61e88b0e3689 22 #define VL53L0_I2C_SDA p28
bdragon52 16:61e88b0e3689 23 #define VL53L0_I2C_SCL p27
bdragon52 16:61e88b0e3689 24 static XNucleo53L0A1 *board=NULL;
bdragon52 16:61e88b0e3689 25 DigitalOut myled (LED2);
bdragon52 16:61e88b0e3689 26 Serial blue(p9,p10);
bdragon52 16:61e88b0e3689 27 Motor RW(p22, p13, p12); // pwm, fwd, rev
bdragon52 16:61e88b0e3689 28 Motor LW(p21, p8, p11); // pwm, fwd, rev
bdragon52 16:61e88b0e3689 29 Thread lidar;
bdragon52 16:61e88b0e3689 30 Thread siren;
bdragon52 16:61e88b0e3689 31 uint32_t distance;
bdragon52 16:61e88b0e3689 32 FILE *wave_file;
cjtallu 14:cc2e4fbaffd8 33
bdragon52 16:61e88b0e3689 34
bdragon52 16:61e88b0e3689 35
bdragon52 16:61e88b0e3689 36 void t3(){
bdragon52 16:61e88b0e3689 37
bdragon52 16:61e88b0e3689 38 while(1){
bdragon52 16:61e88b0e3689 39
bdragon52 16:61e88b0e3689 40 wave_file=fopen("/sd/Bee Gees - Stayin' Alive.wav","r");
bdragon52 16:61e88b0e3689 41 waver.play(wave_file);
bdragon52 16:61e88b0e3689 42 fclose(wave_file);
bdragon52 16:61e88b0e3689 43 Thread::wait(50);
bdragon52 12:af37c8938aaf 44 }
cjtallu 14:cc2e4fbaffd8 45 }
cjtallu 14:cc2e4fbaffd8 46
bdragon52 16:61e88b0e3689 47 void t2() {
bdragon52 16:61e88b0e3689 48
bdragon52 16:61e88b0e3689 49 int status;
bdragon52 16:61e88b0e3689 50 DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
bdragon52 16:61e88b0e3689 51 /* creates the 53L0A1 expansion board singleton obj */
bdragon52 16:61e88b0e3689 52 board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
bdragon52 16:61e88b0e3689 53 shdn = 0; //must reset sensor for an mbed reset to work
bdragon52 16:61e88b0e3689 54 Thread::wait(100);
bdragon52 16:61e88b0e3689 55 shdn = 1;
bdragon52 16:61e88b0e3689 56 Thread::wait(100);
bdragon52 16:61e88b0e3689 57 /* init the 53L0A1 board with default values */
bdragon52 16:61e88b0e3689 58 status = board->init_board();
bdragon52 16:61e88b0e3689 59 while (status) {
bdragon52 16:61e88b0e3689 60 pc.printf("Failed to init board! \r\n");
bdragon52 16:61e88b0e3689 61 status = board->init_board();
emilmont 1:491820ee784d 62 }
bdragon52 16:61e88b0e3689 63 //loop taking and printing distance
bdragon52 13:ab6bbdd2447a 64
bdragon52 16:61e88b0e3689 65 bool speakerOn=false;
bdragon52 16:61e88b0e3689 66
bdragon52 16:61e88b0e3689 67 while (1) {
bdragon52 16:61e88b0e3689 68 status = board->sensor_centre->get_distance(&distance);
bdragon52 16:61e88b0e3689 69 if (status == VL53L0X_ERROR_NONE) {
bdragon52 16:61e88b0e3689 70 //pc.printf("D=%ld mm\r\n", distance);
bdragon52 16:61e88b0e3689 71 }
bdragon52 16:61e88b0e3689 72
bdragon52 16:61e88b0e3689 73 //LIDAR checks
bdragon52 13:ab6bbdd2447a 74
bdragon52 16:61e88b0e3689 75 /* if(speakerOn==false && distance<=100) //thread start sound, speakerOn=true;
bdragon52 16:61e88b0e3689 76 if(speakerOn==true && distance<=100) //certain volume
bdragon52 16:61e88b0e3689 77 if(speakerOn==true && distance<50) //higher volume;
bdragon52 16:61e88b0e3689 78 if(distance>100) //thread stop, speakerOn==false;
bdragon52 16:61e88b0e3689 79 */
bdragon52 16:61e88b0e3689 80 //siren.start(t3);
bdragon52 16:61e88b0e3689 81 myled=!myled;
bdragon52 16:61e88b0e3689 82 Thread::wait(500);
bdragon52 16:61e88b0e3689 83 }
bdragon52 13:ab6bbdd2447a 84
bdragon52 13:ab6bbdd2447a 85 }
bdragon52 13:ab6bbdd2447a 86
bdragon52 13:ab6bbdd2447a 87
bdragon52 13:ab6bbdd2447a 88
bdragon52 16:61e88b0e3689 89
bdragon52 15:c8360ceaad61 90
bdragon52 16:61e88b0e3689 91 int main()
bdragon52 16:61e88b0e3689 92 {
bdragon52 16:61e88b0e3689 93 myled=0;
bdragon52 16:61e88b0e3689 94 //lidar.start(t2);
bdragon52 16:61e88b0e3689 95 //siren.start(t3);
bdragon52 16:61e88b0e3689 96 char bnum=0;
bdragon52 16:61e88b0e3689 97 char bhit=0;
bdragon52 12:af37c8938aaf 98 while(1) {
bdragon52 16:61e88b0e3689 99
bdragon52 16:61e88b0e3689 100 if(blue.readable()==1){
bdragon52 16:61e88b0e3689 101 if (blue.getc()=='!') {
bdragon52 16:61e88b0e3689 102 if (blue.getc()=='B') { //button data packet
bdragon52 16:61e88b0e3689 103 bnum = blue.getc(); //button number
bdragon52 16:61e88b0e3689 104 bhit = blue.getc(); //1=hit, 0=release
bdragon52 16:61e88b0e3689 105 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
bdragon52 16:61e88b0e3689 106 //myled = bnum - '0'; //current button number will appear on LEDs
bdragon52 16:61e88b0e3689 107 switch (bnum) {
bdragon52 16:61e88b0e3689 108 case '1': //number button 1
bdragon52 16:61e88b0e3689 109 if (bhit=='1') {
bdragon52 16:61e88b0e3689 110 RW.speed(1);
bdragon52 16:61e88b0e3689 111 //add hit code here
bdragon52 16:61e88b0e3689 112 } else {
bdragon52 16:61e88b0e3689 113 //add release code here
bdragon52 16:61e88b0e3689 114 }
bdragon52 16:61e88b0e3689 115 break;
bdragon52 16:61e88b0e3689 116 case '2': //number button 2
bdragon52 16:61e88b0e3689 117 if (bhit=='1') {
bdragon52 16:61e88b0e3689 118 RW.speed(0);
bdragon52 16:61e88b0e3689 119 LW.speed(0);
bdragon52 16:61e88b0e3689 120 //add hit code here
bdragon52 16:61e88b0e3689 121 } else {
bdragon52 16:61e88b0e3689 122 //add release code here
bdragon52 16:61e88b0e3689 123 }
bdragon52 16:61e88b0e3689 124 break;
bdragon52 16:61e88b0e3689 125 case '3': //number button 3
bdragon52 16:61e88b0e3689 126 if (bhit=='1') {
bdragon52 16:61e88b0e3689 127 //add hit code here
bdragon52 16:61e88b0e3689 128 } else {
bdragon52 16:61e88b0e3689 129 //add release code here
bdragon52 16:61e88b0e3689 130 }
bdragon52 16:61e88b0e3689 131 break;
bdragon52 16:61e88b0e3689 132 case '4': //number button 4
bdragon52 16:61e88b0e3689 133 if (bhit=='1') {
bdragon52 16:61e88b0e3689 134 //add hit code here
bdragon52 16:61e88b0e3689 135 } else {
bdragon52 16:61e88b0e3689 136 //add release code here
bdragon52 16:61e88b0e3689 137 }
bdragon52 16:61e88b0e3689 138 break;
bdragon52 16:61e88b0e3689 139 case '5': //button 5 up arrow
bdragon52 16:61e88b0e3689 140 if (bhit=='1') {
bdragon52 16:61e88b0e3689 141 //add hit code here
bdragon52 16:61e88b0e3689 142
bdragon52 16:61e88b0e3689 143 RW.speed(1.0);
bdragon52 16:61e88b0e3689 144 LW.speed(1.0);
bdragon52 16:61e88b0e3689 145
bdragon52 16:61e88b0e3689 146 } else {
bdragon52 16:61e88b0e3689 147
bdragon52 16:61e88b0e3689 148 LW.speed(0);
bdragon52 16:61e88b0e3689 149 RW.speed(0);
bdragon52 16:61e88b0e3689 150 //add release code here
bdragon52 16:61e88b0e3689 151 }
bdragon52 16:61e88b0e3689 152 break;
bdragon52 16:61e88b0e3689 153 case '6': //button 6 down arrow
bdragon52 16:61e88b0e3689 154 if (bhit=='1') {
bdragon52 16:61e88b0e3689 155 RW.speed(-1.0);
bdragon52 16:61e88b0e3689 156 LW.speed(-1.0);
bdragon52 16:61e88b0e3689 157 //add hit code here
bdragon52 16:61e88b0e3689 158 } else {
bdragon52 16:61e88b0e3689 159 RW.speed(0);
bdragon52 16:61e88b0e3689 160 LW.speed(0);
bdragon52 16:61e88b0e3689 161 //add release code here
bdragon52 16:61e88b0e3689 162 }
bdragon52 16:61e88b0e3689 163 break;
bdragon52 16:61e88b0e3689 164 case '7': //button 7 left arrow
bdragon52 16:61e88b0e3689 165 if (bhit=='1') {
bdragon52 16:61e88b0e3689 166 RW.speed(1);
bdragon52 16:61e88b0e3689 167 LW.speed(-1);
bdragon52 16:61e88b0e3689 168 //add hit code here
bdragon52 16:61e88b0e3689 169 } else {
bdragon52 16:61e88b0e3689 170
bdragon52 16:61e88b0e3689 171 RW.speed(0);
bdragon52 16:61e88b0e3689 172 LW.speed(0);
bdragon52 16:61e88b0e3689 173 //add release code here
bdragon52 16:61e88b0e3689 174 }
bdragon52 16:61e88b0e3689 175 break;
bdragon52 16:61e88b0e3689 176 case '8': //button 8 right arrow
bdragon52 16:61e88b0e3689 177 if (bhit=='1') {
bdragon52 16:61e88b0e3689 178 RW.speed(-1);
bdragon52 16:61e88b0e3689 179 LW.speed(1);
bdragon52 16:61e88b0e3689 180 //add hit code here
bdragon52 16:61e88b0e3689 181 } else {
bdragon52 16:61e88b0e3689 182 RW.speed(0);
bdragon52 16:61e88b0e3689 183 LW.speed(0);
bdragon52 16:61e88b0e3689 184 //add release code here
bdragon52 16:61e88b0e3689 185 }
bdragon52 16:61e88b0e3689 186 break;
bdragon52 16:61e88b0e3689 187 default:
bdragon52 16:61e88b0e3689 188 break;
bdragon52 16:61e88b0e3689 189 }
bdragon52 16:61e88b0e3689 190 }
bdragon52 16:61e88b0e3689 191 }
bdragon52 16:61e88b0e3689 192 }
bdragon52 16:61e88b0e3689 193
bdragon52 16:61e88b0e3689 194 }
bdragon52 16:61e88b0e3689 195
bdragon52 16:61e88b0e3689 196 Thread::yield();
bdragon52 16:61e88b0e3689 197
bdragon52 12:af37c8938aaf 198 }
bdragon52 12:af37c8938aaf 199
bdragon52 16:61e88b0e3689 200 }