Joyita Roy / Mbed 2 deprecated ECE4180_Project_player1

Dependencies:   mbed X_NUCLEO_53L0A1

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "XNucleo53L0A1.h"
00003 #include <stdio.h>
00004 
00005 
00006 
00007 
00008 DigitalOut enable(p18);
00009 BusOut answer(p19,p20);
00010 BusOut myleds(LED1, LED2, LED3, LED4);
00011 DigitalOut myled1(LED1);
00012 DigitalOut myled2(LED2);
00013 DigitalOut myled3(LED3);
00014 DigitalOut myled4(LED4);
00015 
00016 DigitalIn lidar_enable(p9);
00017 
00018 // READING DATA BETWEEN MBEDS
00019 DigitalIn other_player(p15);
00020 DigitalOut my_player(p16);
00021 
00022 Serial blue(p13, p14);  // tx, rx
00023 
00024 Serial pc(USBTX,USBRX);
00025 DigitalOut shdn(p26);
00026 // This VL53L0X board test application performs a range measurement in polling mode
00027 // Use 3.3(Vout) for Vin, p28 for SDA, p27 for SCL, P26 for shdn on mbed LPC1768
00028 
00029 //I2C sensor pins
00030 #define VL53L0_I2C_SDA   p28
00031 #define VL53L0_I2C_SCL   p27
00032 static XNucleo53L0A1 *board=NULL;
00033 
00034 int msg = -1;
00035 char bnum = 0; //button number variable
00036 char bhit = 0;
00037 
00038 
00039 void bluetooth() //function that is called after lidar distance <70 to get bluetooth inputs
00040 {
00041     while(1) {
00042         pc.printf("Start bluetooth |");
00043         while (blue.readable()) {
00044             blue.getc();
00045         }
00046         if (blue.getc()=='!') {
00047             if (blue.getc()=='B') { //button data
00048                 bnum = blue.getc(); //button number
00049                 bhit = blue.getc(); //1=hit, 0=release
00050                 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) {
00051                     blue.getc();
00052                     while (blue.readable()) {
00053                         blue.getc();
00054                     }
00055                     switch (bnum) {
00056                         case '1': //number button 1
00057                             if (bhit=='1') {
00058                                 msg = 1;
00059                                 myled1 = 1;
00060                             } else {
00061                                 msg = 0;
00062                                 myled1 = 1;
00063                             }
00064                             break;
00065                         case '2': //number button 2
00066                             if (bhit=='1') {
00067                                 msg = 2;
00068                                 myled2 = 1;
00069                             } else {
00070                                 msg = 0;
00071                                 myled2 = 1;
00072                             }
00073                             break;
00074                         case '3': //number button 3
00075                             if (bhit=='1') {
00076                                 msg = 3;
00077                                 myled3 = 1;
00078                             } else {
00079                                 msg = 0;
00080                                 myled3 = 1;
00081                             }
00082                             break;
00083                         case '4': //number button 4
00084                             if (bhit=='1') {
00085                                 msg = 4;
00086                                 myled4 = 1;
00087                             } else {
00088                                 msg = 0;
00089                                 myled4 = 1;
00090                             }
00091                             break;
00092                         default:
00093                             break;
00094 
00095                     }
00096                     //device.putc(msg);
00097                     return;
00098                 }
00099             }
00100         }
00101 
00102         //device.putc(msg);
00103         wait(1);
00104     }
00105 }
00106 
00107 int main()
00108 {
00109 
00110     int status;
00111     uint32_t distance;
00112     DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
00113     /* creates the 53L0A1 expansion board singleton obj */
00114     board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
00115     shdn = 0; //must reset sensor for an mbed reset to work
00116     wait(0.1);
00117     shdn = 1;
00118     wait(0.1);
00119     /* init the 53L0A1 board with default values */
00120     status = board->init_board();
00121     while (status) {
00122         pc.printf("Failed to init board! \r\n");
00123         status = board->init_board();
00124     }
00125     //loop taking and printing distance
00126 
00127     while (1) {
00128         msg = 0;
00129         status = board->sensor_centre->get_distance(&distance);
00130         if (status == VL53L0X_ERROR_NONE) {
00131 
00132            
00133             if (distance < 70) {
00134 // once master mbed as already printed the question
00135                 if (lidar_enable){
00136                     
00137                     my_player = 1;
00138                     
00139                     if (!other_player) {  //if the other player has not pressed buzzer yet
00140                         myleds = 15; // all leds on player mbed light up using BUSOUT
00141                         wait(0.5);
00142                         myleds = 0;
00143                         bluetooth();
00144                         if (msg > 0 && msg < 5) {
00145                             answer = msg - 1;//send answer to master
00146                             enable = 1; //let master mbed know youre ready
00147                             wait(1);
00148                         }
00149                     }
00150                 }
00151             } else {
00152                 //reset values
00153                 msg = -1;
00154                 enable = 0;
00155                 myleds = 0;
00156                 my_player = 0;
00157             
00158             }
00159         }
00160     }
00161 
00162 }