![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
lab 7 code
Diff: main.cpp
- Revision:
- 0:4350259cf0d0
- Child:
- 1:2a6907395c5d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Mar 08 16:58:55 2018 +0000 @@ -0,0 +1,391 @@ +#include "mbed.h" +#include "MPL3115A2.h" + +Serial pc(SERIAL_TX, SERIAL_RX); +DigitalOut myled(LED1); + +// Selects SDA as I2C1_SDA on pin PB_7 +// Selects SCL on I2C1_SCL on pin PB_6 +// The I2C address of the pressure sensor is fixed at 0x60. +MPL3115A2 pressure_sensor(PB_7,PB_6,0x60); + +struct dataPoints +{ + double pres; + double tmp; + +}; + + +//Solution entails + +int main() { + + dataPoints data[100]; + + uint8_t id; + pc.printf("\n\r*** MPL3115A2 Pressure/Temperature Sensor Test *** \n\r"); + while ((id=pressure_sensor.getID())!=0xC4) { + pc.printf("Status read unsuccessful: Value = 0x%02x\n\r",id); + pc.printf("Check wiring to the pressure sensor\n\r",id); + pc.printf("Retesting for correct ID in 1 second...\n\r"); + wait(1); + } + //uint8_t tmp[2]; + //tmp[0] = 0x26; +// pressure_sensor.readRegs(0x26, &tmp[1], 1); +// tmp[1] = tmp[1] & 0xC6; +// pressure_sensor.writeRegs(tmp,2); + pc.printf("Status read successfully: Value = 0x%02x\n\r",id); + pc.printf("***1hz readings from the pressure sensor***\n\r"); + + int counter= 0; + while(1) { + //this is where I would check for the GPIO pin if implemented + if(counter!=100){ + dataPoints p1 = {0,0}; + //pc.printf("%f hPA; %f m\n\r",pressure_sensor.getPressure(),pressure_sensor.getAltitude()); + p1.pres = pressure_sensor.getPressure(); + p1.tmp = pressure_sensor.getTemperature(); + data[counter] = p1; + //pc.printf("STORED VALUES: \n\r Pressure: %f hPA, Altitude: %f m\n\r",data[0].pres,data[0].alt); + pc.printf("DATA STORED\n\r"); + + //if the counter is going to go over the 100 limit reset it to zero and then + if(counter+1<=100){ + counter++; + } + else{ + counter=0; + } + myled = !myled; + wait(1); + } + else{ + pc.printf("STORED VALUES: \n\r Pressure: %f hPA, Altitude: %f m\n\r",data[0].pres,data[0].tmp); + for(int i=1; i<=counter; i++){ + pc.printf("Pressure: %f hPA, Altitude: %f m\n\r",data[i].pres,data[i].tmp); + } + for(int i=0; i<=100; i++){ + data[i].pres=NULL; + data[i].tmp=NULL; + } + pc.printf("Cleared Data \n\r"); + } + } +} + +int mpl3115_reg_print(int start, int length) { + + if(0x00 <= start && start <=0x2D){ + if(length==0){ + length=46; + uint8_t data[1]; + for(int i=start; i<length; i++){ + pressure_sensor.readRegs(i, data, 1); + switch(i){ + case(0x00): + printf("0x%x: MPL_STATUS=0x%x\r\n",i,data[0]); + break; + case(0x01): + printf("0x%x: MPL_OUT_P_MSB=0x%x\r\n",i,data[0]); + break; + case(0x02): + printf("0x%x: MPL_OUT_P_CSB=0x%x\r\n",i,data[0]); + break; + case(0x03): + printf("0x%x: MPL_OUT_P_LSB=0x%x\r\n",i,data[0]); + break; + case(0x04): + printf("0x%x: MPL_OUT_T_MSB=0x%x\r\n",i,data[0]); + break; + case(0x05): + printf("0x%x: MPL_OUT_T_LSB=0x%x\r\n",i,data[0]); + break; + case(0x06): + printf("0x%x: MPL_DR_STATUS=0x%x\r\n",i,data[0]); + break; + case(0x07): + printf("0x%x: MPL_OUT_P_DELTA_MSB=0x%x\r\n",i,data[0]); + break; + case(0x08): + printf("0x%x: MPL_OUT_P_DELTA_CSB=0x%x\r\n",i,data[0]); + break; + case(0x09): + printf("0x%x: MPL_OUT_P_DELTA_LSB=0x%x\r\n",i,data[0]); + break; + case(0x0A): + printf("0x%x: MPL_OUT_T_DELTA_MSB=0x%x\r\n",i,data[0]); + break; + case(0x0B): + printf("0x%x: MPL_OUT_T_DELTA_LSB=0x%x\r\n",i,data[0]); + break; + case(0x0C): + printf("0x%x: MPL_WHO_AM_I=0x%x\r\n",i,data[0]); + break; + case(0x0D): + printf("0x%x: MPL_F_STATUS=0x%x\r\n",i,data[0]); + break; + case(0x0E): + printf("0x%x: MPL_F_DATA=0x%x\r\n",i,data[0]); + break; + case(0x0F): + printf("0x%x: MPL_F_SETUP=0x%x\r\n",i,data[0]); + break; + case(0x10): + printf("0x%x: MPL_TIME_DLY=0x%x\r\n",i,data[0]); + break; + case(0x11): + printf("0x%x: MPL_SYSMOD=0x%x\r\n",i,data[0]); + break; + case(0x12): + printf("0x%x: MPL_INT_SOURCE=0x%x\r\n",i,data[0]); + break; + case(0x13): + printf("0x%x: MPL_PT_DATA_CFG=0x%x\r\n",i,data[0]); + break; + case(0x14): + printf("0x%x: MPL_BAR_IN_MSB=0x%x\r\n",i,data[0]); + break; + case(0x15): + printf("0x%x: MPL_BAR_IN_LSB=0x%x\r\n",i,data[0]); + break; + case(0x16): + printf("0x%x: MPL_P_TGT_MSB=0x%x\r\n",i,data[0]); + break; + case(0x17): + printf("0x%x: MPL_P_TGT_LSB=0x%x\r\n",i,data[0]); + break; + case(0x18): + printf("0x%x: MPL_T_TGT=0x%x\r\n",i,data[0]); + break; + case(0x19): + printf("0x%x: MPL_P_WND_MSB=0x%x\r\n",i,data[0]); + break; + case(0x1A): + printf("0x%x: MPL_P_WND_LSB=0x%x\r\n",i,data[0]); + break; + case(0x1B): + printf("0x%x: MPL_T_WND=0x%x\r\n",i,data[0]); + break; + case(0x1C): + printf("0x%x: MPL_P_MIN_MSB=0x%x\r\n",i,data[0]); + break; + case(0x1D): + printf("0x%x: MPL_P_MIN_CSB=0x%x\r\n",i,data[0]); + break; + case(0x1E): + printf("0x%x: MPL_P_MIN_LSB=0x%x\r\n",i,data[0]); + break; + case(0x1F): + printf("0x%x: MPL_T_MIN_MSB=0x%x\r\n",i,data[0]); + break; + case(0x20): + printf("0x%x: MPL_T_MIN_LSB=0x%x\r\n",i,data[0]); + break; + case(0x21): + printf("0x%x: MPL_P_MAX_MSB=0x%x\r\n",i,data[0]); + break; + case(0x22): + printf("0x%x: MPL_P_MAX_CSB=0x%x\r\n",i,data[0]); + break; + case(0x23): + printf("0x%x: MPL_P_MAX_LSB=0x%x\r\n",i,data[0]); + break; + case(0x24): + printf("0x%x: MPL_T_MAX_MSB=0x%x\r\n",i,data[0]); + break; + case(0x25): + printf("0x%x: MPL_T_MAX_LSB=0x%x\r\n",i,data[0]); + break; + case(0x26): + printf("0x%x: MPL_CTRL_REG1=0x%x\r\n",i,data[0]); + break; + case(0x27): + printf("0x%x: MPL_CTRL_REG2=0x%x\r\n",i,data[0]); + break; + case(0x28): + printf("0x%x: MPL_CTRL_REG3=0x%x\r\n",i,data[0]); + break; + case(0x29): + printf("0x%x: MPL_CTRL_REG4=0x%x\r\n",i,data[0]); + break; + case(0x2A): + printf("0x%x: MPL_CTRL_REG5=0x%x\r\n",i,data[0]); + break; + case(0x2B): + printf("0x%x: MPL_OFF_P=0x%x\r\n",i,data[0]); + break; + case(0x2C): + printf("0x%x: MPL_OFF_T=0x%x\r\n",i,data[0]); + break; + case(0x2D): + printf("0x%x: MPL_OFF_H=0x%x\r\n",i,data[0]); + break; + case(0x2E): + printf("0x%x: MPL_T_MIN_MSB=0x%x\r\n",i,data[0]); + break; + case(0x2F): + printf("0x%x: MPL_T_MIN_MSB=0x%x\r\n",i,data[0]); + break; + } + } + } + else if(length>0){ + uint8_t data[1]; + for(int i=start; i<length; i++){ + pressure_sensor.readRegs(i, data, 1); + switch(i){ + case(0x00): + printf("0x%x: MPL_STATUS=0x%x\r\n",i,data[0]); + break; + case(0x01): + printf("0x%x: MPL_OUT_P_MSB=0x%x\r\n",i,data[0]); + break; + case(0x02): + printf("0x%x: MPL_OUT_P_CSB=0x%x\r\n",i,data[0]); + break; + case(0x03): + printf("0x%x: MPL_OUT_P_LSB=0x%x\r\n",i,data[0]); + break; + case(0x04): + printf("0x%x: MPL_OUT_T_MSB=0x%x\r\n",i,data[0]); + break; + case(0x05): + printf("0x%x: MPL_OUT_T_LSB=0x%x\r\n",i,data[0]); + break; + case(0x06): + printf("0x%x: MPL_DR_STATUS=0x%x\r\n",i,data[0]); + break; + case(0x07): + printf("0x%x: MPL_OUT_P_DELTA_MSB=0x%x\r\n",i,data[0]); + break; + case(0x08): + printf("0x%x: MPL_OUT_P_DELTA_CSB=0x%x\r\n",i,data[0]); + break; + case(0x09): + printf("0x%x: MPL_OUT_P_DELTA_LSB=0x%x\r\n",i,data[0]); + break; + case(0x0A): + printf("0x%x: MPL_OUT_T_DELTA_MSB=0x%x\r\n",i,data[0]); + break; + case(0x0B): + printf("0x%x: MPL_OUT_T_DELTA_LSB=0x%x\r\n",i,data[0]); + break; + case(0x0C): + printf("0x%x: MPL_WHO_AM_I=0x%x\r\n",i,data[0]); + break; + case(0x0D): + printf("0x%x: MPL_F_STATUS=0x%x\r\n",i,data[0]); + break; + case(0x0E): + printf("0x%x: MPL_F_DATA=0x%x\r\n",i,data[0]); + break; + case(0x0F): + printf("0x%x: MPL_F_SETUP=0x%x\r\n",i,data[0]); + break; + case(0x10): + printf("0x%x: MPL_TIME_DLY=0x%x\r\n",i,data[0]); + break; + case(0x11): + printf("0x%x: MPL_SYSMOD=0x%x\r\n",i,data[0]); + break; + case(0x12): + printf("0x%x: MPL_INT_SOURCE=0x%x\r\n",i,data[0]); + break; + case(0x13): + printf("0x%x: MPL_PT_DATA_CFG=0x%x\r\n",i,data[0]); + break; + case(0x14): + printf("0x%x: MPL_BAR_IN_MSB=0x%x\r\n",i,data[0]); + break; + case(0x15): + printf("0x%x: MPL_BAR_IN_LSB=0x%x\r\n",i,data[0]); + break; + case(0x16): + printf("0x%x: MPL_P_TGT_MSB=0x%x\r\n",i,data[0]); + break; + case(0x17): + printf("0x%x: MPL_P_TGT_LSB=0x%x\r\n",i,data[0]); + break; + case(0x18): + printf("0x%x: MPL_T_TGT=0x%x\r\n",i,data[0]); + break; + case(0x19): + printf("0x%x: MPL_P_WND_MSB=0x%x\r\n",i,data[0]); + break; + case(0x1A): + printf("0x%x: MPL_P_WND_LSB=0x%x\r\n",i,data[0]); + break; + case(0x1B): + printf("0x%x: MPL_T_WND=0x%x\r\n",i,data[0]); + break; + case(0x1C): + printf("0x%x: MPL_P_MIN_MSB=0x%x\r\n",i,data[0]); + break; + case(0x1D): + printf("0x%x: MPL_P_MIN_CSB=0x%x\r\n",i,data[0]); + break; + case(0x1E): + printf("0x%x: MPL_P_MIN_LSB=0x%x\r\n",i,data[0]); + break; + case(0x1F): + printf("0x%x: MPL_T_MIN_MSB=0x%x\r\n",i,data[0]); + break; + case(0x20): + printf("0x%x: MPL_T_MIN_LSB=0x%x\r\n",i,data[0]); + break; + case(0x21): + printf("0x%x: MPL_P_MAX_MSB=0x%x\r\n",i,data[0]); + break; + case(0x22): + printf("0x%x: MPL_P_MAX_CSB=0x%x\r\n",i,data[0]); + break; + case(0x23): + printf("0x%x: MPL_P_MAX_LSB=0x%x\r\n",i,data[0]); + break; + case(0x24): + printf("0x%x: MPL_T_MAX_MSB=0x%x\r\n",i,data[0]); + break; + case(0x25): + printf("0x%x: MPL_T_MAX_LSB=0x%x\r\n",i,data[0]); + break; + case(0x26): + printf("0x%x: MPL_CTRL_REG1=0x%x\r\n",i,data[0]); + break; + case(0x27): + printf("0x%x: MPL_CTRL_REG2=0x%x\r\n",i,data[0]); + break; + case(0x28): + printf("0x%x: MPL_CTRL_REG3=0x%x\r\n",i,data[0]); + break; + case(0x29): + printf("0x%x: MPL_CTRL_REG4=0x%x\r\n",i,data[0]); + break; + case(0x2A): + printf("0x%x: MPL_CTRL_REG5=0x%x\r\n",i,data[0]); + break; + case(0x2B): + printf("0x%x: MPL_OFF_P=0x%x\r\n",i,data[0]); + break; + case(0x2C): + printf("0x%x: MPL_OFF_T=0x%x\r\n",i,data[0]); + break; + case(0x2D): + printf("0x%x: MPL_OFF_H=0x%x\r\n",i,data[0]); + break; + case(0x2E): + printf("0x%x: MPL_T_MIN_MSB=0x%x\r\n",i,data[0]); + break; + case(0x2F): + printf("0x%x: MPL_T_MIN_MSB=0x%x\r\n",i,data[0]); + break; + } + } + return 0; + } + else{ + return -1; + } + } +} \ No newline at end of file