11

Dependencies:   ADXL362 ATParser MPL3115A2 mbed

Fork of Lab7 by CPS-Lab*

Committer:
jackclar
Date:
Fri Mar 09 01:10:40 2018 +0000
Revision:
2:c322c1331eaa
Parent:
0:9a45e4f07b10
Child:
4:eb81ef9e1621
Lab 7;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fanbsun 0:9a45e4f07b10 1 #include "mbed.h"
fanbsun 0:9a45e4f07b10 2 #include "MPL3115A2.h"
fanbsun 0:9a45e4f07b10 3 #include <string>
fanbsun 0:9a45e4f07b10 4 #include <math.h>
fanbsun 0:9a45e4f07b10 5
fanbsun 0:9a45e4f07b10 6 Serial pc(SERIAL_TX, SERIAL_RX);
fanbsun 0:9a45e4f07b10 7 DigitalOut myled(LED1);
jackclar 2:c322c1331eaa 8 DigitalOut powerpin(PA_8); // GPIO pin
fanbsun 0:9a45e4f07b10 9
fanbsun 0:9a45e4f07b10 10 // Selects SDA as I2C1_SDA on pin PB_7
fanbsun 0:9a45e4f07b10 11 // Selects SCL on I2C1_SCL on pin PB_6
fanbsun 0:9a45e4f07b10 12 // The I2C address of the pressure sensor is fixed at 0x60.
fanbsun 0:9a45e4f07b10 13 MPL3115A2 pressure_sensor(PB_7,PB_6,0x60);
jackclar 2:c322c1331eaa 14 void mpl3115_reg_print(int start, int length); // prototype
fanbsun 0:9a45e4f07b10 15
fanbsun 0:9a45e4f07b10 16 int main() {
jackclar 2:c322c1331eaa 17 int8_t a;
jackclar 2:c322c1331eaa 18 uint8_t id;
fanbsun 0:9a45e4f07b10 19 double p, t;
jackclar 2:c322c1331eaa 20 double v , s;
fanbsun 0:9a45e4f07b10 21 int cnt = 0;
fanbsun 0:9a45e4f07b10 22 myled = 0;
jackclar 2:c322c1331eaa 23 char c;
fanbsun 0:9a45e4f07b10 24 powerpin = 0;
jackclar 2:c322c1331eaa 25 double alt1 = pressure_sensor.getAltitude(), alt2; // initial alt
fanbsun 0:9a45e4f07b10 26
jackclar 2:c322c1331eaa 27 while ((id=pressure_sensor.getID())!=0xC4)// wait for the sensor to connect
jackclar 2:c322c1331eaa 28 {
jackclar 2:c322c1331eaa 29 wait(1);
jackclar 2:c322c1331eaa 30 }
fanbsun 0:9a45e4f07b10 31
fanbsun 0:9a45e4f07b10 32 while(1)
fanbsun 0:9a45e4f07b10 33 {
jackclar 2:c322c1331eaa 34 if(powerpin) // if the GPIO pin is pulled high
jackclar 2:c322c1331eaa 35 {
jackclar 2:c322c1331eaa 36 myled != myled;
jackclar 2:c322c1331eaa 37 //turn on and off led at 1Hz
jackclar 2:c322c1331eaa 38 p=pressure_sensor.getPressure();
jackclar 2:c322c1331eaa 39 t=pressure_sensor.getTemperature();
jackclar 2:c322c1331eaa 40 alt2=pressure_sensor.getAltitude();
jackclar 2:c322c1331eaa 41 v = (alt2 - alt1)/ 1.1;
jackclar 2:c322c1331eaa 42 // velocity is just distance / time
jackclar 2:c322c1331eaa 43 // we measured the time to be 1.1 seconds between readings
jackclar 2:c322c1331eaa 44 // this is as fast as it will go because of the library we were given
jackclar 2:c322c1331eaa 45 pc.printf("velocity = %f\n\r", v);
jackclar 2:c322c1331eaa 46 alt1 = alt2;
jackclar 2:c322c1331eaa 47
jackclar 2:c322c1331eaa 48 pc.printf("%f %f\n\r", t, p);
jackclar 2:c322c1331eaa 49 cnt++;
jackclar 2:c322c1331eaa 50 }
jackclar 2:c322c1331eaa 51 else
jackclar 2:c322c1331eaa 52 {
jackclar 2:c322c1331eaa 53 myled = 0; // so we know when no data is being taken
jackclar 2:c322c1331eaa 54 }
fanbsun 0:9a45e4f07b10 55 }
fanbsun 0:9a45e4f07b10 56 }
jackclar 2:c322c1331eaa 57
jackclar 2:c322c1331eaa 58 void mpl3115_reg_print(int start, int length)
jackclar 2:c322c1331eaa 59 {
jackclar 2:c322c1331eaa 60 uint8_t i, id;
jackclar 2:c322c1331eaa 61 std::string name;
jackclar 2:c322c1331eaa 62 uint8_t temp[1];
jackclar 2:c322c1331eaa 63 id = pressure_sensor.getID();
jackclar 2:c322c1331eaa 64
jackclar 2:c322c1331eaa 65 // check start registers
jackclar 2:c322c1331eaa 66 if(start >= 0x00 && start <= 0x2D && length >= 0x00 && id == 0xC4)
jackclar 2:c322c1331eaa 67 {
jackclar 2:c322c1331eaa 68 // print all if length = 0
jackclar 2:c322c1331eaa 69 if(length == 0)
jackclar 2:c322c1331eaa 70 {
jackclar 2:c322c1331eaa 71 start = 0;
jackclar 2:c322c1331eaa 72 length = 46;
jackclar 2:c322c1331eaa 73 }
jackclar 2:c322c1331eaa 74
jackclar 2:c322c1331eaa 75 for(i = start; i < start + length; i++)
jackclar 2:c322c1331eaa 76 {
jackclar 2:c322c1331eaa 77 // make sure name is correct
jackclar 2:c322c1331eaa 78 switch(i)
jackclar 2:c322c1331eaa 79 {
jackclar 2:c322c1331eaa 80 case 0x00:
jackclar 2:c322c1331eaa 81 name = "MPL_STATUS";
jackclar 2:c322c1331eaa 82 break;
jackclar 2:c322c1331eaa 83 case 0x01:
jackclar 2:c322c1331eaa 84 name = "MPL_OUT_P_MSB";
jackclar 2:c322c1331eaa 85 break;
jackclar 2:c322c1331eaa 86 case 0x02:
jackclar 2:c322c1331eaa 87 name = "MPL_OUT_P_CSB";
jackclar 2:c322c1331eaa 88 break;
jackclar 2:c322c1331eaa 89 case 0x03:
jackclar 2:c322c1331eaa 90 name = "MPL_OUT_P_LSB";
jackclar 2:c322c1331eaa 91 break;
jackclar 2:c322c1331eaa 92 case 0x04:
jackclar 2:c322c1331eaa 93 name = "MPL_OUT_T_MSB";
jackclar 2:c322c1331eaa 94 break;
jackclar 2:c322c1331eaa 95 case 0x05:
jackclar 2:c322c1331eaa 96 name = "MPL_OUT_T_LSB";
jackclar 2:c322c1331eaa 97 break;
jackclar 2:c322c1331eaa 98 case 0x06:
jackclar 2:c322c1331eaa 99 name = "MPL_DR_STATUS";
jackclar 2:c322c1331eaa 100 break;
jackclar 2:c322c1331eaa 101 case 0x07:
jackclar 2:c322c1331eaa 102 name = "MPL_OUT_P_DELTA_MSB";
jackclar 2:c322c1331eaa 103 break;
jackclar 2:c322c1331eaa 104 case 0x08:
jackclar 2:c322c1331eaa 105 name = "MPL_OUT_P_DELTA_CSB";
jackclar 2:c322c1331eaa 106 break;
jackclar 2:c322c1331eaa 107 case 0x09:
jackclar 2:c322c1331eaa 108 name = "MPL_OUT_P_DELTA_LSB";
jackclar 2:c322c1331eaa 109 break;
jackclar 2:c322c1331eaa 110 case 0x0A:
jackclar 2:c322c1331eaa 111 name = "MPL_OUT_T_DELTA_MSB";
jackclar 2:c322c1331eaa 112 break;
jackclar 2:c322c1331eaa 113 case 0x0B:
jackclar 2:c322c1331eaa 114 name = "MPL_OUT_T_DELTA_LSB";
jackclar 2:c322c1331eaa 115 break;
jackclar 2:c322c1331eaa 116 case 0x0C:
jackclar 2:c322c1331eaa 117 name = "MPL_WHO_AM_I";
jackclar 2:c322c1331eaa 118 break;
jackclar 2:c322c1331eaa 119 case 0x0D:
jackclar 2:c322c1331eaa 120 name = "MPL_F_STATUS";
jackclar 2:c322c1331eaa 121 break;
jackclar 2:c322c1331eaa 122 case 0x0E:
jackclar 2:c322c1331eaa 123 name = "MPL_F_DATA";
jackclar 2:c322c1331eaa 124 break;
jackclar 2:c322c1331eaa 125 case 0x0F:
jackclar 2:c322c1331eaa 126 name = "MPL_F_SETUP";
jackclar 2:c322c1331eaa 127 break;
jackclar 2:c322c1331eaa 128 case 0x10:
jackclar 2:c322c1331eaa 129 name = "MPL_TIME_DLY";
jackclar 2:c322c1331eaa 130 break;
jackclar 2:c322c1331eaa 131 case 0x11:
jackclar 2:c322c1331eaa 132 name = "MPL_SYSMOD";
jackclar 2:c322c1331eaa 133 break;
jackclar 2:c322c1331eaa 134 case 0x12:
jackclar 2:c322c1331eaa 135 name = "MPL_INT_SOURCE";
jackclar 2:c322c1331eaa 136 break;
jackclar 2:c322c1331eaa 137 case 0x13:
jackclar 2:c322c1331eaa 138 name = "MPL_PT_DATA_CFG";
jackclar 2:c322c1331eaa 139 break;
jackclar 2:c322c1331eaa 140 case 0x14:
jackclar 2:c322c1331eaa 141 name = "MPL_BAR_IN_MSB";
jackclar 2:c322c1331eaa 142 break;
jackclar 2:c322c1331eaa 143 case 0x15:
jackclar 2:c322c1331eaa 144 name = "MPL_BAR_IN_LSB";
jackclar 2:c322c1331eaa 145 break;
jackclar 2:c322c1331eaa 146 case 0x16:
jackclar 2:c322c1331eaa 147 name = "MPL_P_TGT_MSB";
jackclar 2:c322c1331eaa 148 break;
jackclar 2:c322c1331eaa 149 case 0x17:
jackclar 2:c322c1331eaa 150 name = "MPL_P_TGT_LSB";
jackclar 2:c322c1331eaa 151 break;
jackclar 2:c322c1331eaa 152 case 0x18:
jackclar 2:c322c1331eaa 153 name = "MPL_T_TGT";
jackclar 2:c322c1331eaa 154 break;
jackclar 2:c322c1331eaa 155 case 0x19:
jackclar 2:c322c1331eaa 156 name = "MPL_P_WND_MSB";
jackclar 2:c322c1331eaa 157 break;
jackclar 2:c322c1331eaa 158 case 0x1A:
jackclar 2:c322c1331eaa 159 name = "MPL_P_WND_LSB";
jackclar 2:c322c1331eaa 160 break;
jackclar 2:c322c1331eaa 161 case 0x1B:
jackclar 2:c322c1331eaa 162 name = "MPL_T_WND";
jackclar 2:c322c1331eaa 163 break;
jackclar 2:c322c1331eaa 164 case 0x1C:
jackclar 2:c322c1331eaa 165 name = "MPL_P_MIN_MSB";
jackclar 2:c322c1331eaa 166 break;
jackclar 2:c322c1331eaa 167 case 0x1D:
jackclar 2:c322c1331eaa 168 name = "MPL_P_MIN_CSB";
jackclar 2:c322c1331eaa 169 break;
jackclar 2:c322c1331eaa 170 case 0x1E:
jackclar 2:c322c1331eaa 171 name = "MPL_P_MIN_LSB";
jackclar 2:c322c1331eaa 172 break;
jackclar 2:c322c1331eaa 173 case 0x1F:
jackclar 2:c322c1331eaa 174 name = "MPL_T_MIN_MSB";
jackclar 2:c322c1331eaa 175 break;
jackclar 2:c322c1331eaa 176 case 0x20:
jackclar 2:c322c1331eaa 177 name = "MPL_T_MIN_LSB";
jackclar 2:c322c1331eaa 178 break;
jackclar 2:c322c1331eaa 179 case 0x21:
jackclar 2:c322c1331eaa 180 name = "MPL_P_MAX_MSB";
jackclar 2:c322c1331eaa 181 break;
jackclar 2:c322c1331eaa 182 case 0x22:
jackclar 2:c322c1331eaa 183 name = "MPL_P_MAX_CSB";
jackclar 2:c322c1331eaa 184 break;
jackclar 2:c322c1331eaa 185 case 0x23:
jackclar 2:c322c1331eaa 186 name = "MPL_P_MAX_LSB";
jackclar 2:c322c1331eaa 187 break;
jackclar 2:c322c1331eaa 188 case 0x24:
jackclar 2:c322c1331eaa 189 name = "MPL_T_MAX_MSB";
jackclar 2:c322c1331eaa 190 break;
jackclar 2:c322c1331eaa 191 case 0x25:
jackclar 2:c322c1331eaa 192 name = "MPL_T_MAX_LSB";
jackclar 2:c322c1331eaa 193 break;
jackclar 2:c322c1331eaa 194 case 0x26:
jackclar 2:c322c1331eaa 195 name = "MPL_CTRL_REG1";
jackclar 2:c322c1331eaa 196 break;
jackclar 2:c322c1331eaa 197 case 0x27:
jackclar 2:c322c1331eaa 198 name = "MPL_CTRL_REG2";
jackclar 2:c322c1331eaa 199 break;
jackclar 2:c322c1331eaa 200 case 0x28:
jackclar 2:c322c1331eaa 201 name = "MPL_CTRL_REG3";
jackclar 2:c322c1331eaa 202 break;
jackclar 2:c322c1331eaa 203 case 0x29:
jackclar 2:c322c1331eaa 204 name = "MPL_CTRL_REG4";
jackclar 2:c322c1331eaa 205 break;
jackclar 2:c322c1331eaa 206 case 0x2A:
jackclar 2:c322c1331eaa 207 name = "MPL_CTRL_REG5";
jackclar 2:c322c1331eaa 208 break;
jackclar 2:c322c1331eaa 209 case 0x2B:
jackclar 2:c322c1331eaa 210 name = "MPL_OFF_P";
jackclar 2:c322c1331eaa 211 break;
jackclar 2:c322c1331eaa 212 case 0x2C:
jackclar 2:c322c1331eaa 213 name = "MPL_OFF_T";
jackclar 2:c322c1331eaa 214 break;
jackclar 2:c322c1331eaa 215 case 0x2D:
jackclar 2:c322c1331eaa 216 name = "MPL_OFF_h";
jackclar 2:c322c1331eaa 217 break;
jackclar 2:c322c1331eaa 218 }
jackclar 2:c322c1331eaa 219 // boy I do love switch statments
jackclar 2:c322c1331eaa 220 pressure_sensor.readRegs(i, temp, 1);
jackclar 2:c322c1331eaa 221 pc.printf("0x%x: %s=0x%x\n\r", i, name, temp[0]);
jackclar 2:c322c1331eaa 222 // actually print the contents of the register
jackclar 2:c322c1331eaa 223 }
jackclar 2:c322c1331eaa 224
jackclar 2:c322c1331eaa 225 }
jackclar 2:c322c1331eaa 226 }