Complete Build
Dependencies: 4DGL-uLCD-SE1 Motor SDFileSystem X_NUCLEO_53L0A1 mbed-rtos mbed BotwithWavePlayerLevel
Fork of BotWithBluetoothLIDARV2 by
main.cpp@18:aa7f48962bdb, 2017-12-01 (annotated)
- Committer:
- bdragon52
- Date:
- Fri Dec 01 03:13:48 2017 +0000
- Revision:
- 18:aa7f48962bdb
- Parent:
- 17:2c6549be1ecb
- Child:
- 19:f854f09cf1ab
Complete Build
Who changed what in which revision?
User | Revision | Line number | New 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 | |
ctallardc | 17:2c6549be1ecb | 6 | #define SD_DBG 1 |
ctallardc | 17:2c6549be1ecb | 7 | |
bdragon52 | 16:61e88b0e3689 | 8 | #include "SDFileSystem.h" |
bdragon52 | 16:61e88b0e3689 | 9 | SDFileSystem sd(p5, p6, p7, p29, "sd"); |
bdragon52 | 12:af37c8938aaf | 10 | |
bdragon52 | 16:61e88b0e3689 | 11 | |
bdragon52 | 16:61e88b0e3689 | 12 | #include "wave_player.h" |
bdragon52 | 12:af37c8938aaf | 13 | AnalogOut DACout(p18); |
bdragon52 | 12:af37c8938aaf | 14 | wave_player waver(&DACout); |
bdragon52 | 16:61e88b0e3689 | 15 | |
bdragon52 | 16:61e88b0e3689 | 16 | #include "XNucleo53L0A1.h" |
bdragon52 | 16:61e88b0e3689 | 17 | #include <stdio.h> |
bdragon52 | 16:61e88b0e3689 | 18 | Serial pc(USBTX,USBRX); |
bdragon52 | 16:61e88b0e3689 | 19 | DigitalOut shdn(p26); |
bdragon52 | 18:aa7f48962bdb | 20 | |
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; |
ctallardc | 17:2c6549be1ecb | 32 | int level = 8; //Volume level is turned off |
ctallardc | 17:2c6549be1ecb | 33 | |
cjtallu | 14:cc2e4fbaffd8 | 34 | |
bdragon52 | 18:aa7f48962bdb | 35 | //speaker thread |
bdragon52 | 16:61e88b0e3689 | 36 | void t3(){ |
bdragon52 | 18:aa7f48962bdb | 37 | |
bdragon52 | 16:61e88b0e3689 | 38 | while(1){ |
bdragon52 | 18:aa7f48962bdb | 39 | |
ctallardc | 17:2c6549be1ecb | 40 | FILE *wave_file=fopen("/sd/LoudSound.wav","r"); |
bdragon52 | 16:61e88b0e3689 | 41 | waver.play(wave_file); |
bdragon52 | 18:aa7f48962bdb | 42 | fclose(wave_file); |
ctallardc | 17:2c6549be1ecb | 43 | |
bdragon52 | 12:af37c8938aaf | 44 | } |
cjtallu | 14:cc2e4fbaffd8 | 45 | } |
cjtallu | 14:cc2e4fbaffd8 | 46 | |
bdragon52 | 18:aa7f48962bdb | 47 | //lidar thread |
bdragon52 | 16:61e88b0e3689 | 48 | void t2() { |
bdragon52 | 16:61e88b0e3689 | 49 | |
bdragon52 | 16:61e88b0e3689 | 50 | int status; |
bdragon52 | 16:61e88b0e3689 | 51 | DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL); |
bdragon52 | 16:61e88b0e3689 | 52 | /* creates the 53L0A1 expansion board singleton obj */ |
bdragon52 | 16:61e88b0e3689 | 53 | board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2); |
bdragon52 | 16:61e88b0e3689 | 54 | shdn = 0; //must reset sensor for an mbed reset to work |
bdragon52 | 16:61e88b0e3689 | 55 | Thread::wait(100); |
ctallardc | 17:2c6549be1ecb | 56 | //lidar power off |
bdragon52 | 16:61e88b0e3689 | 57 | shdn = 1; |
bdragon52 | 16:61e88b0e3689 | 58 | Thread::wait(100); |
bdragon52 | 16:61e88b0e3689 | 59 | /* init the 53L0A1 board with default values */ |
bdragon52 | 16:61e88b0e3689 | 60 | status = board->init_board(); |
bdragon52 | 16:61e88b0e3689 | 61 | while (status) { |
bdragon52 | 16:61e88b0e3689 | 62 | pc.printf("Failed to init board! \r\n"); |
bdragon52 | 16:61e88b0e3689 | 63 | status = board->init_board(); |
emilmont | 1:491820ee784d | 64 | } |
bdragon52 | 16:61e88b0e3689 | 65 | //loop taking and printing distance |
bdragon52 | 16:61e88b0e3689 | 66 | while (1) { |
bdragon52 | 16:61e88b0e3689 | 67 | status = board->sensor_centre->get_distance(&distance); |
bdragon52 | 16:61e88b0e3689 | 68 | if (status == VL53L0X_ERROR_NONE) { |
ctallardc | 17:2c6549be1ecb | 69 | pc.printf("D=%ld mm\r\n", distance); |
ctallardc | 17:2c6549be1ecb | 70 | if(distance > 240) level = 8; |
ctallardc | 17:2c6549be1ecb | 71 | if(distance < 90) level = 0; |
ctallardc | 17:2c6549be1ecb | 72 | if (distance >=90 && distance <=240){ |
ctallardc | 17:2c6549be1ecb | 73 | int value=floor(static_cast<double>(8*(distance-90)/150)); |
ctallardc | 17:2c6549be1ecb | 74 | if(value >=0 && value<=8){ |
ctallardc | 17:2c6549be1ecb | 75 | level=value; |
ctallardc | 17:2c6549be1ecb | 76 | } |
ctallardc | 17:2c6549be1ecb | 77 | } |
bdragon52 | 16:61e88b0e3689 | 78 | } |
bdragon52 | 16:61e88b0e3689 | 79 | myled=!myled; |
bdragon52 | 16:61e88b0e3689 | 80 | Thread::wait(500); |
bdragon52 | 16:61e88b0e3689 | 81 | } |
bdragon52 | 13:ab6bbdd2447a | 82 | |
bdragon52 | 13:ab6bbdd2447a | 83 | } |
bdragon52 | 13:ab6bbdd2447a | 84 | |
bdragon52 | 13:ab6bbdd2447a | 85 | |
bdragon52 | 18:aa7f48962bdb | 86 | //bor movement using bluetooth thread |
bdragon52 | 16:61e88b0e3689 | 87 | int main() |
bdragon52 | 16:61e88b0e3689 | 88 | { |
ctallardc | 17:2c6549be1ecb | 89 | char previousButton='0'; |
ctallardc | 17:2c6549be1ecb | 90 | char current; |
bdragon52 | 16:61e88b0e3689 | 91 | myled=0; |
ctallardc | 17:2c6549be1ecb | 92 | pc.printf("in main\n\r"); |
ctallardc | 17:2c6549be1ecb | 93 | lidar.start(t2); |
ctallardc | 17:2c6549be1ecb | 94 | siren.start(t3); |
bdragon52 | 16:61e88b0e3689 | 95 | char bnum=0; |
bdragon52 | 16:61e88b0e3689 | 96 | char bhit=0; |
bdragon52 | 12:af37c8938aaf | 97 | while(1) { |
bdragon52 | 16:61e88b0e3689 | 98 | |
bdragon52 | 16:61e88b0e3689 | 99 | if(blue.readable()==1){ |
bdragon52 | 16:61e88b0e3689 | 100 | if (blue.getc()=='!') { |
bdragon52 | 16:61e88b0e3689 | 101 | if (blue.getc()=='B') { //button data packet |
bdragon52 | 16:61e88b0e3689 | 102 | bnum = blue.getc(); //button number |
bdragon52 | 16:61e88b0e3689 | 103 | bhit = blue.getc(); //1=hit, 0=release |
ctallardc | 17:2c6549be1ecb | 104 | current=bnum; |
ctallardc | 17:2c6549be1ecb | 105 | previousButton = current; |
bdragon52 | 18:aa7f48962bdb | 106 | if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { |
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 | } else { |
bdragon52 | 16:61e88b0e3689 | 112 | //add release code here |
bdragon52 | 16:61e88b0e3689 | 113 | break; |
bdragon52 | 16:61e88b0e3689 | 114 | case '2': //number button 2 |
bdragon52 | 16:61e88b0e3689 | 115 | if (bhit=='1') { |
bdragon52 | 16:61e88b0e3689 | 116 | RW.speed(0); |
bdragon52 | 16:61e88b0e3689 | 117 | LW.speed(0); |
bdragon52 | 16:61e88b0e3689 | 118 | //add hit code here |
bdragon52 | 16:61e88b0e3689 | 119 | } else { |
bdragon52 | 16:61e88b0e3689 | 120 | //add release code here |
bdragon52 | 16:61e88b0e3689 | 121 | } |
bdragon52 | 16:61e88b0e3689 | 122 | break; |
bdragon52 | 16:61e88b0e3689 | 123 | case '3': //number button 3 |
bdragon52 | 16:61e88b0e3689 | 124 | if (bhit=='1') { |
bdragon52 | 16:61e88b0e3689 | 125 | //add hit code here |
bdragon52 | 16:61e88b0e3689 | 126 | } else { |
bdragon52 | 16:61e88b0e3689 | 127 | //add release code here |
bdragon52 | 16:61e88b0e3689 | 128 | } |
bdragon52 | 16:61e88b0e3689 | 129 | break; |
bdragon52 | 16:61e88b0e3689 | 130 | case '4': //number button 4 |
bdragon52 | 16:61e88b0e3689 | 131 | if (bhit=='1') { |
bdragon52 | 16:61e88b0e3689 | 132 | //add hit code here |
bdragon52 | 16:61e88b0e3689 | 133 | } else { |
bdragon52 | 16:61e88b0e3689 | 134 | //add release code here |
bdragon52 | 16:61e88b0e3689 | 135 | } |
bdragon52 | 16:61e88b0e3689 | 136 | break; |
bdragon52 | 16:61e88b0e3689 | 137 | case '5': //button 5 up arrow |
bdragon52 | 16:61e88b0e3689 | 138 | if (bhit=='1') { |
bdragon52 | 18:aa7f48962bdb | 139 | RW.speed(1.0); |
bdragon52 | 18:aa7f48962bdb | 140 | LW.speed(1.0); |
bdragon52 | 16:61e88b0e3689 | 141 | } else { |
bdragon52 | 18:aa7f48962bdb | 142 | RW.speed(0); |
bdragon52 | 18:aa7f48962bdb | 143 | LW.speed(0); |
bdragon52 | 16:61e88b0e3689 | 144 | } |
bdragon52 | 16:61e88b0e3689 | 145 | break; |
bdragon52 | 16:61e88b0e3689 | 146 | case '6': //button 6 down arrow |
bdragon52 | 16:61e88b0e3689 | 147 | if (bhit=='1') { |
bdragon52 | 18:aa7f48962bdb | 148 | RW.speed(-1.0); |
bdragon52 | 18:aa7f48962bdb | 149 | LW.speed(-1.0); |
bdragon52 | 16:61e88b0e3689 | 150 | //add hit code here |
bdragon52 | 16:61e88b0e3689 | 151 | } else { |
bdragon52 | 16:61e88b0e3689 | 152 | RW.speed(0); |
bdragon52 | 18:aa7f48962bdb | 153 | LW.speed(0); |
bdragon52 | 16:61e88b0e3689 | 154 | } |
bdragon52 | 16:61e88b0e3689 | 155 | break; |
bdragon52 | 16:61e88b0e3689 | 156 | case '7': //button 7 left arrow |
bdragon52 | 16:61e88b0e3689 | 157 | if (bhit=='1') { |
ctallardc | 17:2c6549be1ecb | 158 | RW.speed(-1.0); |
bdragon52 | 18:aa7f48962bdb | 159 | LW.speed(1.0); |
bdragon52 | 16:61e88b0e3689 | 160 | } else { |
bdragon52 | 16:61e88b0e3689 | 161 | RW.speed(0); |
bdragon52 | 18:aa7f48962bdb | 162 | LW.speed(0); |
bdragon52 | 16:61e88b0e3689 | 163 | } |
bdragon52 | 16:61e88b0e3689 | 164 | break; |
bdragon52 | 16:61e88b0e3689 | 165 | case '8': //button 8 right arrow |
bdragon52 | 16:61e88b0e3689 | 166 | if (bhit=='1') { |
ctallardc | 17:2c6549be1ecb | 167 | RW.speed(1.0); |
bdragon52 | 18:aa7f48962bdb | 168 | LW.speed(-1.0); |
bdragon52 | 16:61e88b0e3689 | 169 | } else { |
bdragon52 | 16:61e88b0e3689 | 170 | RW.speed(0); |
bdragon52 | 18:aa7f48962bdb | 171 | LW.speed(0); |
bdragon52 | 16:61e88b0e3689 | 172 | } |
bdragon52 | 16:61e88b0e3689 | 173 | break; |
bdragon52 | 16:61e88b0e3689 | 174 | default: |
bdragon52 | 16:61e88b0e3689 | 175 | break; |
bdragon52 | 16:61e88b0e3689 | 176 | } |
bdragon52 | 16:61e88b0e3689 | 177 | } |
bdragon52 | 16:61e88b0e3689 | 178 | } |
bdragon52 | 16:61e88b0e3689 | 179 | } |
bdragon52 | 16:61e88b0e3689 | 180 | |
bdragon52 | 16:61e88b0e3689 | 181 | } |
bdragon52 | 16:61e88b0e3689 | 182 | |
bdragon52 | 16:61e88b0e3689 | 183 | Thread::yield(); |
bdragon52 | 16:61e88b0e3689 | 184 | |
bdragon52 | 12:af37c8938aaf | 185 | } |
bdragon52 | 18:aa7f48962bdb | 186 | } |
bdragon52 | 16:61e88b0e3689 | 187 | } |