
92
Dependencies: ADXL362 ATParser MPL3115A2 TSL2561 mbed
Fork of Lab91 by
main.cpp
- Committer:
- jackclar
- Date:
- 2018-03-09
- Revision:
- 2:c322c1331eaa
- Parent:
- 0:9a45e4f07b10
- Child:
- 4:eb81ef9e1621
File content as of revision 2:c322c1331eaa:
#include "mbed.h" #include "MPL3115A2.h" #include <string> #include <math.h> Serial pc(SERIAL_TX, SERIAL_RX); DigitalOut myled(LED1); DigitalOut powerpin(PA_8); // GPIO pin // 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); void mpl3115_reg_print(int start, int length); // prototype int main() { int8_t a; uint8_t id; double p, t; double v , s; int cnt = 0; myled = 0; char c; powerpin = 0; double alt1 = pressure_sensor.getAltitude(), alt2; // initial alt while ((id=pressure_sensor.getID())!=0xC4)// wait for the sensor to connect { wait(1); } while(1) { if(powerpin) // if the GPIO pin is pulled high { myled != myled; //turn on and off led at 1Hz p=pressure_sensor.getPressure(); t=pressure_sensor.getTemperature(); alt2=pressure_sensor.getAltitude(); v = (alt2 - alt1)/ 1.1; // velocity is just distance / time // we measured the time to be 1.1 seconds between readings // this is as fast as it will go because of the library we were given pc.printf("velocity = %f\n\r", v); alt1 = alt2; pc.printf("%f %f\n\r", t, p); cnt++; } else { myled = 0; // so we know when no data is being taken } } } void mpl3115_reg_print(int start, int length) { uint8_t i, id; std::string name; uint8_t temp[1]; id = pressure_sensor.getID(); // check start registers if(start >= 0x00 && start <= 0x2D && length >= 0x00 && id == 0xC4) { // print all if length = 0 if(length == 0) { start = 0; length = 46; } for(i = start; i < start + length; i++) { // make sure name is correct switch(i) { case 0x00: name = "MPL_STATUS"; break; case 0x01: name = "MPL_OUT_P_MSB"; break; case 0x02: name = "MPL_OUT_P_CSB"; break; case 0x03: name = "MPL_OUT_P_LSB"; break; case 0x04: name = "MPL_OUT_T_MSB"; break; case 0x05: name = "MPL_OUT_T_LSB"; break; case 0x06: name = "MPL_DR_STATUS"; break; case 0x07: name = "MPL_OUT_P_DELTA_MSB"; break; case 0x08: name = "MPL_OUT_P_DELTA_CSB"; break; case 0x09: name = "MPL_OUT_P_DELTA_LSB"; break; case 0x0A: name = "MPL_OUT_T_DELTA_MSB"; break; case 0x0B: name = "MPL_OUT_T_DELTA_LSB"; break; case 0x0C: name = "MPL_WHO_AM_I"; break; case 0x0D: name = "MPL_F_STATUS"; break; case 0x0E: name = "MPL_F_DATA"; break; case 0x0F: name = "MPL_F_SETUP"; break; case 0x10: name = "MPL_TIME_DLY"; break; case 0x11: name = "MPL_SYSMOD"; break; case 0x12: name = "MPL_INT_SOURCE"; break; case 0x13: name = "MPL_PT_DATA_CFG"; break; case 0x14: name = "MPL_BAR_IN_MSB"; break; case 0x15: name = "MPL_BAR_IN_LSB"; break; case 0x16: name = "MPL_P_TGT_MSB"; break; case 0x17: name = "MPL_P_TGT_LSB"; break; case 0x18: name = "MPL_T_TGT"; break; case 0x19: name = "MPL_P_WND_MSB"; break; case 0x1A: name = "MPL_P_WND_LSB"; break; case 0x1B: name = "MPL_T_WND"; break; case 0x1C: name = "MPL_P_MIN_MSB"; break; case 0x1D: name = "MPL_P_MIN_CSB"; break; case 0x1E: name = "MPL_P_MIN_LSB"; break; case 0x1F: name = "MPL_T_MIN_MSB"; break; case 0x20: name = "MPL_T_MIN_LSB"; break; case 0x21: name = "MPL_P_MAX_MSB"; break; case 0x22: name = "MPL_P_MAX_CSB"; break; case 0x23: name = "MPL_P_MAX_LSB"; break; case 0x24: name = "MPL_T_MAX_MSB"; break; case 0x25: name = "MPL_T_MAX_LSB"; break; case 0x26: name = "MPL_CTRL_REG1"; break; case 0x27: name = "MPL_CTRL_REG2"; break; case 0x28: name = "MPL_CTRL_REG3"; break; case 0x29: name = "MPL_CTRL_REG4"; break; case 0x2A: name = "MPL_CTRL_REG5"; break; case 0x2B: name = "MPL_OFF_P"; break; case 0x2C: name = "MPL_OFF_T"; break; case 0x2D: name = "MPL_OFF_h"; break; } // boy I do love switch statments pressure_sensor.readRegs(i, temp, 1); pc.printf("0x%x: %s=0x%x\n\r", i, name, temp[0]); // actually print the contents of the register } } }