ECE 4180 Project Player Code
Dependencies: mbed X_NUCLEO_53L0A1
main.cpp@0:eb5aeaa4576e, 2019-04-23 (annotated)
- Committer:
- jroy32
- Date:
- Tue Apr 23 18:53:20 2019 +0000
- Revision:
- 0:eb5aeaa4576e
ECE 4180 Project Player Code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jroy32 | 0:eb5aeaa4576e | 1 | #include "mbed.h" |
jroy32 | 0:eb5aeaa4576e | 2 | #include "XNucleo53L0A1.h" |
jroy32 | 0:eb5aeaa4576e | 3 | #include <stdio.h> |
jroy32 | 0:eb5aeaa4576e | 4 | |
jroy32 | 0:eb5aeaa4576e | 5 | |
jroy32 | 0:eb5aeaa4576e | 6 | |
jroy32 | 0:eb5aeaa4576e | 7 | |
jroy32 | 0:eb5aeaa4576e | 8 | DigitalOut enable(p18); |
jroy32 | 0:eb5aeaa4576e | 9 | BusOut answer(p19,p20); |
jroy32 | 0:eb5aeaa4576e | 10 | BusOut myleds(LED1, LED2, LED3, LED4); |
jroy32 | 0:eb5aeaa4576e | 11 | DigitalOut myled1(LED1); |
jroy32 | 0:eb5aeaa4576e | 12 | DigitalOut myled2(LED2); |
jroy32 | 0:eb5aeaa4576e | 13 | DigitalOut myled3(LED3); |
jroy32 | 0:eb5aeaa4576e | 14 | DigitalOut myled4(LED4); |
jroy32 | 0:eb5aeaa4576e | 15 | |
jroy32 | 0:eb5aeaa4576e | 16 | DigitalIn lidar_enable(p9); |
jroy32 | 0:eb5aeaa4576e | 17 | |
jroy32 | 0:eb5aeaa4576e | 18 | // READING DATA BETWEEN MBEDS |
jroy32 | 0:eb5aeaa4576e | 19 | DigitalIn other_player(p15); |
jroy32 | 0:eb5aeaa4576e | 20 | DigitalOut my_player(p16); |
jroy32 | 0:eb5aeaa4576e | 21 | |
jroy32 | 0:eb5aeaa4576e | 22 | Serial blue(p13, p14); // tx, rx |
jroy32 | 0:eb5aeaa4576e | 23 | |
jroy32 | 0:eb5aeaa4576e | 24 | Serial pc(USBTX,USBRX); |
jroy32 | 0:eb5aeaa4576e | 25 | DigitalOut shdn(p26); |
jroy32 | 0:eb5aeaa4576e | 26 | // This VL53L0X board test application performs a range measurement in polling mode |
jroy32 | 0:eb5aeaa4576e | 27 | // Use 3.3(Vout) for Vin, p28 for SDA, p27 for SCL, P26 for shdn on mbed LPC1768 |
jroy32 | 0:eb5aeaa4576e | 28 | |
jroy32 | 0:eb5aeaa4576e | 29 | //I2C sensor pins |
jroy32 | 0:eb5aeaa4576e | 30 | #define VL53L0_I2C_SDA p28 |
jroy32 | 0:eb5aeaa4576e | 31 | #define VL53L0_I2C_SCL p27 |
jroy32 | 0:eb5aeaa4576e | 32 | static XNucleo53L0A1 *board=NULL; |
jroy32 | 0:eb5aeaa4576e | 33 | |
jroy32 | 0:eb5aeaa4576e | 34 | int msg = -1; |
jroy32 | 0:eb5aeaa4576e | 35 | char bnum = 0; //button number variable |
jroy32 | 0:eb5aeaa4576e | 36 | char bhit = 0; |
jroy32 | 0:eb5aeaa4576e | 37 | |
jroy32 | 0:eb5aeaa4576e | 38 | |
jroy32 | 0:eb5aeaa4576e | 39 | void bluetooth() //function that is called after lidar distance <70 to get bluetooth inputs |
jroy32 | 0:eb5aeaa4576e | 40 | { |
jroy32 | 0:eb5aeaa4576e | 41 | while(1) { |
jroy32 | 0:eb5aeaa4576e | 42 | pc.printf("Start bluetooth |"); |
jroy32 | 0:eb5aeaa4576e | 43 | while (blue.readable()) { |
jroy32 | 0:eb5aeaa4576e | 44 | blue.getc(); |
jroy32 | 0:eb5aeaa4576e | 45 | } |
jroy32 | 0:eb5aeaa4576e | 46 | if (blue.getc()=='!') { |
jroy32 | 0:eb5aeaa4576e | 47 | if (blue.getc()=='B') { //button data |
jroy32 | 0:eb5aeaa4576e | 48 | bnum = blue.getc(); //button number |
jroy32 | 0:eb5aeaa4576e | 49 | bhit = blue.getc(); //1=hit, 0=release |
jroy32 | 0:eb5aeaa4576e | 50 | if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { |
jroy32 | 0:eb5aeaa4576e | 51 | blue.getc(); |
jroy32 | 0:eb5aeaa4576e | 52 | while (blue.readable()) { |
jroy32 | 0:eb5aeaa4576e | 53 | blue.getc(); |
jroy32 | 0:eb5aeaa4576e | 54 | } |
jroy32 | 0:eb5aeaa4576e | 55 | switch (bnum) { |
jroy32 | 0:eb5aeaa4576e | 56 | case '1': //number button 1 |
jroy32 | 0:eb5aeaa4576e | 57 | if (bhit=='1') { |
jroy32 | 0:eb5aeaa4576e | 58 | msg = 1; |
jroy32 | 0:eb5aeaa4576e | 59 | myled1 = 1; |
jroy32 | 0:eb5aeaa4576e | 60 | } else { |
jroy32 | 0:eb5aeaa4576e | 61 | msg = 0; |
jroy32 | 0:eb5aeaa4576e | 62 | myled1 = 1; |
jroy32 | 0:eb5aeaa4576e | 63 | } |
jroy32 | 0:eb5aeaa4576e | 64 | break; |
jroy32 | 0:eb5aeaa4576e | 65 | case '2': //number button 2 |
jroy32 | 0:eb5aeaa4576e | 66 | if (bhit=='1') { |
jroy32 | 0:eb5aeaa4576e | 67 | msg = 2; |
jroy32 | 0:eb5aeaa4576e | 68 | myled2 = 1; |
jroy32 | 0:eb5aeaa4576e | 69 | } else { |
jroy32 | 0:eb5aeaa4576e | 70 | msg = 0; |
jroy32 | 0:eb5aeaa4576e | 71 | myled2 = 1; |
jroy32 | 0:eb5aeaa4576e | 72 | } |
jroy32 | 0:eb5aeaa4576e | 73 | break; |
jroy32 | 0:eb5aeaa4576e | 74 | case '3': //number button 3 |
jroy32 | 0:eb5aeaa4576e | 75 | if (bhit=='1') { |
jroy32 | 0:eb5aeaa4576e | 76 | msg = 3; |
jroy32 | 0:eb5aeaa4576e | 77 | myled3 = 1; |
jroy32 | 0:eb5aeaa4576e | 78 | } else { |
jroy32 | 0:eb5aeaa4576e | 79 | msg = 0; |
jroy32 | 0:eb5aeaa4576e | 80 | myled3 = 1; |
jroy32 | 0:eb5aeaa4576e | 81 | } |
jroy32 | 0:eb5aeaa4576e | 82 | break; |
jroy32 | 0:eb5aeaa4576e | 83 | case '4': //number button 4 |
jroy32 | 0:eb5aeaa4576e | 84 | if (bhit=='1') { |
jroy32 | 0:eb5aeaa4576e | 85 | msg = 4; |
jroy32 | 0:eb5aeaa4576e | 86 | myled4 = 1; |
jroy32 | 0:eb5aeaa4576e | 87 | } else { |
jroy32 | 0:eb5aeaa4576e | 88 | msg = 0; |
jroy32 | 0:eb5aeaa4576e | 89 | myled4 = 1; |
jroy32 | 0:eb5aeaa4576e | 90 | } |
jroy32 | 0:eb5aeaa4576e | 91 | break; |
jroy32 | 0:eb5aeaa4576e | 92 | default: |
jroy32 | 0:eb5aeaa4576e | 93 | break; |
jroy32 | 0:eb5aeaa4576e | 94 | |
jroy32 | 0:eb5aeaa4576e | 95 | } |
jroy32 | 0:eb5aeaa4576e | 96 | //device.putc(msg); |
jroy32 | 0:eb5aeaa4576e | 97 | return; |
jroy32 | 0:eb5aeaa4576e | 98 | } |
jroy32 | 0:eb5aeaa4576e | 99 | } |
jroy32 | 0:eb5aeaa4576e | 100 | } |
jroy32 | 0:eb5aeaa4576e | 101 | |
jroy32 | 0:eb5aeaa4576e | 102 | //device.putc(msg); |
jroy32 | 0:eb5aeaa4576e | 103 | wait(1); |
jroy32 | 0:eb5aeaa4576e | 104 | } |
jroy32 | 0:eb5aeaa4576e | 105 | } |
jroy32 | 0:eb5aeaa4576e | 106 | |
jroy32 | 0:eb5aeaa4576e | 107 | int main() |
jroy32 | 0:eb5aeaa4576e | 108 | { |
jroy32 | 0:eb5aeaa4576e | 109 | |
jroy32 | 0:eb5aeaa4576e | 110 | int status; |
jroy32 | 0:eb5aeaa4576e | 111 | uint32_t distance; |
jroy32 | 0:eb5aeaa4576e | 112 | DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL); |
jroy32 | 0:eb5aeaa4576e | 113 | /* creates the 53L0A1 expansion board singleton obj */ |
jroy32 | 0:eb5aeaa4576e | 114 | board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2); |
jroy32 | 0:eb5aeaa4576e | 115 | shdn = 0; //must reset sensor for an mbed reset to work |
jroy32 | 0:eb5aeaa4576e | 116 | wait(0.1); |
jroy32 | 0:eb5aeaa4576e | 117 | shdn = 1; |
jroy32 | 0:eb5aeaa4576e | 118 | wait(0.1); |
jroy32 | 0:eb5aeaa4576e | 119 | /* init the 53L0A1 board with default values */ |
jroy32 | 0:eb5aeaa4576e | 120 | status = board->init_board(); |
jroy32 | 0:eb5aeaa4576e | 121 | while (status) { |
jroy32 | 0:eb5aeaa4576e | 122 | pc.printf("Failed to init board! \r\n"); |
jroy32 | 0:eb5aeaa4576e | 123 | status = board->init_board(); |
jroy32 | 0:eb5aeaa4576e | 124 | } |
jroy32 | 0:eb5aeaa4576e | 125 | //loop taking and printing distance |
jroy32 | 0:eb5aeaa4576e | 126 | |
jroy32 | 0:eb5aeaa4576e | 127 | while (1) { |
jroy32 | 0:eb5aeaa4576e | 128 | msg = 0; |
jroy32 | 0:eb5aeaa4576e | 129 | status = board->sensor_centre->get_distance(&distance); |
jroy32 | 0:eb5aeaa4576e | 130 | if (status == VL53L0X_ERROR_NONE) { |
jroy32 | 0:eb5aeaa4576e | 131 | |
jroy32 | 0:eb5aeaa4576e | 132 | |
jroy32 | 0:eb5aeaa4576e | 133 | if (distance < 70) { |
jroy32 | 0:eb5aeaa4576e | 134 | // once master mbed as already printed the question |
jroy32 | 0:eb5aeaa4576e | 135 | if (lidar_enable){ |
jroy32 | 0:eb5aeaa4576e | 136 | |
jroy32 | 0:eb5aeaa4576e | 137 | my_player = 1; |
jroy32 | 0:eb5aeaa4576e | 138 | |
jroy32 | 0:eb5aeaa4576e | 139 | if (!other_player) { //if the other player has not pressed buzzer yet |
jroy32 | 0:eb5aeaa4576e | 140 | myleds = 15; // all leds on player mbed light up using BUSOUT |
jroy32 | 0:eb5aeaa4576e | 141 | wait(0.5); |
jroy32 | 0:eb5aeaa4576e | 142 | myleds = 0; |
jroy32 | 0:eb5aeaa4576e | 143 | bluetooth(); |
jroy32 | 0:eb5aeaa4576e | 144 | if (msg > 0 && msg < 5) { |
jroy32 | 0:eb5aeaa4576e | 145 | answer = msg - 1;//send answer to master |
jroy32 | 0:eb5aeaa4576e | 146 | enable = 1; //let master mbed know youre ready |
jroy32 | 0:eb5aeaa4576e | 147 | wait(1); |
jroy32 | 0:eb5aeaa4576e | 148 | } |
jroy32 | 0:eb5aeaa4576e | 149 | } |
jroy32 | 0:eb5aeaa4576e | 150 | } |
jroy32 | 0:eb5aeaa4576e | 151 | } else { |
jroy32 | 0:eb5aeaa4576e | 152 | //reset values |
jroy32 | 0:eb5aeaa4576e | 153 | msg = -1; |
jroy32 | 0:eb5aeaa4576e | 154 | enable = 0; |
jroy32 | 0:eb5aeaa4576e | 155 | myleds = 0; |
jroy32 | 0:eb5aeaa4576e | 156 | my_player = 0; |
jroy32 | 0:eb5aeaa4576e | 157 | |
jroy32 | 0:eb5aeaa4576e | 158 | } |
jroy32 | 0:eb5aeaa4576e | 159 | } |
jroy32 | 0:eb5aeaa4576e | 160 | } |
jroy32 | 0:eb5aeaa4576e | 161 | |
jroy32 | 0:eb5aeaa4576e | 162 | } |