lab 6

Dependencies:   ADXL362 mbed MPL3115A2

Committer:
htdoughe
Date:
Fri Mar 09 16:25:45 2018 +0000
Revision:
33:5df68b9e96de
Parent:
32:f6664eade7fe
last tweaks to report

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rmneubau 0:0f663d16e8a2 1 #include "mbed.h"
rmneubau 0:0f663d16e8a2 2 #include "ADXL362.h"
htdoughe 4:8065ca897f8b 3 #include "string.h"
htdoughe 16:993757c8b398 4 #include "MPL3115A2.h"
htdoughe 26:19823b051994 5 #include <stdio.h>
htdoughe 26:19823b051994 6 #include <time.h>
htdoughe 28:0ed68c73dd28 7
htdoughe 18:216cc41b55f3 8 DigitalOut led3(LED3);
htdoughe 26:19823b051994 9 Serial pc(USBTX, USBRX);
htdoughe 31:c924aad0dc4b 10 //AnalogIn gpio(D9);
htdoughe 4:8065ca897f8b 11
htdoughe 16:993757c8b398 12 //map of register values and names for the adxl
htdoughe 20:8d93acd1f8cd 13 int aregids[34];
htdoughe 20:8d93acd1f8cd 14 char* aregnames[34];
htdoughe 20:8d93acd1f8cd 15 //populating the map
htdoughe 26:19823b051994 16 void initmap()
htdoughe 26:19823b051994 17 {
htdoughe 20:8d93acd1f8cd 18 aregids[0] = 0x00;
htdoughe 20:8d93acd1f8cd 19 aregids[1] = 0x01;
htdoughe 20:8d93acd1f8cd 20 aregids[2] = 0x02;
htdoughe 20:8d93acd1f8cd 21 aregids[3] = 0x03;
htdoughe 20:8d93acd1f8cd 22 aregids[4] = 0x08;
htdoughe 20:8d93acd1f8cd 23 aregids[5] = 0x09;
htdoughe 20:8d93acd1f8cd 24 aregids[6] = 0x0A;
htdoughe 20:8d93acd1f8cd 25 aregids[7] = 0x0B;
htdoughe 20:8d93acd1f8cd 26 aregids[8] = 0x0c;
htdoughe 20:8d93acd1f8cd 27 aregids[9] = 0x0D;
htdoughe 20:8d93acd1f8cd 28 aregids[10] = 0x0E;
htdoughe 20:8d93acd1f8cd 29 aregids[11] = 0x0F;
htdoughe 20:8d93acd1f8cd 30 aregids[12] = 0x10;
htdoughe 20:8d93acd1f8cd 31 aregids[13] = 0x11;
htdoughe 20:8d93acd1f8cd 32 aregids[14] = 0x12;
htdoughe 20:8d93acd1f8cd 33 aregids[15] = 0x13;
htdoughe 20:8d93acd1f8cd 34 aregids[16] = 0x14;
htdoughe 20:8d93acd1f8cd 35 aregids[17] = 0x15;
htdoughe 20:8d93acd1f8cd 36 aregids[18] = 0x1F;
htdoughe 20:8d93acd1f8cd 37 aregids[19] = 0x20;
htdoughe 20:8d93acd1f8cd 38 aregids[20] = 0x21;
htdoughe 20:8d93acd1f8cd 39 aregids[21] = 0x22;
htdoughe 20:8d93acd1f8cd 40 aregids[22] = 0x23;
htdoughe 20:8d93acd1f8cd 41 aregids[23] = 0x24;
htdoughe 20:8d93acd1f8cd 42 aregids[24] = 0x25;
htdoughe 20:8d93acd1f8cd 43 aregids[25] = 0x26;
htdoughe 20:8d93acd1f8cd 44 aregids[26] = 0x27;
htdoughe 20:8d93acd1f8cd 45 aregids[27] = 0x28;
htdoughe 20:8d93acd1f8cd 46 aregids[28] = 0x29;
htdoughe 20:8d93acd1f8cd 47 aregids[29] = 0x2A;
htdoughe 20:8d93acd1f8cd 48 aregids[30] = 0x2B;
htdoughe 20:8d93acd1f8cd 49 aregids[31] = 0x2C;
htdoughe 20:8d93acd1f8cd 50 aregids[32] = 0x2D;
htdoughe 20:8d93acd1f8cd 51 aregids[33] = 0x2E;
htdoughe 26:19823b051994 52
htdoughe 20:8d93acd1f8cd 53 aregnames[0] = "DEVID_AD";
htdoughe 20:8d93acd1f8cd 54 aregnames[1] = "DEVID_MST";
htdoughe 20:8d93acd1f8cd 55 aregnames[2] = "PARTID";
htdoughe 20:8d93acd1f8cd 56 aregnames[3] = "REVID";
htdoughe 20:8d93acd1f8cd 57 aregnames[4] = "XDATA";
htdoughe 20:8d93acd1f8cd 58 aregnames[5] = "YDATA";
htdoughe 20:8d93acd1f8cd 59 aregnames[6] = "ZDATA";
htdoughe 20:8d93acd1f8cd 60 aregnames[7] = "STATUS";
htdoughe 20:8d93acd1f8cd 61 aregnames[8] = "FIFO_ENTRIES_L";
htdoughe 20:8d93acd1f8cd 62 aregnames[9] = "FIFO_ENTRIES_H";
htdoughe 20:8d93acd1f8cd 63 aregnames[10] = "XDATA_L";
htdoughe 20:8d93acd1f8cd 64 aregnames[11] = "XDATA_H";
htdoughe 20:8d93acd1f8cd 65 aregnames[12] = "YDATA_L";
htdoughe 20:8d93acd1f8cd 66 aregnames[13] = "YDATA_H";
htdoughe 20:8d93acd1f8cd 67 aregnames[14] = "ZDATA_L";
htdoughe 20:8d93acd1f8cd 68 aregnames[15] = "ZDATA_H";
htdoughe 20:8d93acd1f8cd 69 aregnames[16] = "TEMP_L";
htdoughe 20:8d93acd1f8cd 70 aregnames[17] = "TEMP_H";
htdoughe 20:8d93acd1f8cd 71 aregnames[18] = "SOFT_RESET";
htdoughe 20:8d93acd1f8cd 72 aregnames[19] = "THRESH_ACT_L";
htdoughe 20:8d93acd1f8cd 73 aregnames[20] = "THRESH_ACT_H";
htdoughe 20:8d93acd1f8cd 74 aregnames[21] = "TIME_ACT";
htdoughe 20:8d93acd1f8cd 75 aregnames[22] = "THRESH_INACT_L";
htdoughe 20:8d93acd1f8cd 76 aregnames[23] = "THRESH_INACT_H";
htdoughe 20:8d93acd1f8cd 77 aregnames[24] = "TIME_INACT_L";
htdoughe 20:8d93acd1f8cd 78 aregnames[25] = "TIME_INACT_H";
htdoughe 20:8d93acd1f8cd 79 aregnames[26] = "ACT_INACT_CTL";
htdoughe 20:8d93acd1f8cd 80 aregnames[27] = "FIFO_CONTROL";
htdoughe 20:8d93acd1f8cd 81 aregnames[28] = "FIFO_SAMPLES";
htdoughe 20:8d93acd1f8cd 82 aregnames[29] = "INTMAP1";
htdoughe 20:8d93acd1f8cd 83 aregnames[30] = "INTMAP2";
htdoughe 20:8d93acd1f8cd 84 aregnames[31] = "FILTER_CTL";
htdoughe 20:8d93acd1f8cd 85 aregnames[32] = "POWER_CTL";
htdoughe 20:8d93acd1f8cd 86 aregnames[33] = "SELF_TEST";
htdoughe 20:8d93acd1f8cd 87 }
htdoughe 20:8d93acd1f8cd 88
htdoughe 20:8d93acd1f8cd 89 //map of register values and names for the adxl
htdoughe 22:1cd3cb77ec07 90 char mregids[46];
htdoughe 22:1cd3cb77ec07 91 char* mregnames[46];
htdoughe 4:8065ca897f8b 92 //populating the map
htdoughe 26:19823b051994 93 void minitmap()
htdoughe 26:19823b051994 94 {
htdoughe 20:8d93acd1f8cd 95 mregids[0] = 0x00;
htdoughe 20:8d93acd1f8cd 96 mregids[1] = 0x01;
htdoughe 20:8d93acd1f8cd 97 mregids[2] = 0x02;
htdoughe 20:8d93acd1f8cd 98 mregids[3] = 0x03;
htdoughe 20:8d93acd1f8cd 99 mregids[4] = 0x04;
htdoughe 20:8d93acd1f8cd 100 mregids[5] = 0x05;
htdoughe 20:8d93acd1f8cd 101 mregids[6] = 0x06;
htdoughe 20:8d93acd1f8cd 102 mregids[7] = 0x07;
htdoughe 20:8d93acd1f8cd 103 mregids[8] = 0x08;
htdoughe 20:8d93acd1f8cd 104 mregids[9] = 0x09;
htdoughe 20:8d93acd1f8cd 105 mregids[10] = 0x0A;
htdoughe 20:8d93acd1f8cd 106 mregids[11] = 0x0B;
htdoughe 20:8d93acd1f8cd 107 mregids[12] = 0x0C;
htdoughe 20:8d93acd1f8cd 108 mregids[13] = 0x0D;
htdoughe 20:8d93acd1f8cd 109 mregids[14] = 0x0E;
htdoughe 20:8d93acd1f8cd 110 mregids[15] = 0x0F;
htdoughe 20:8d93acd1f8cd 111 mregids[16] = 0x10;
htdoughe 20:8d93acd1f8cd 112 mregids[17] = 0x11;
htdoughe 20:8d93acd1f8cd 113 mregids[18] = 0x12;
htdoughe 20:8d93acd1f8cd 114 mregids[19] = 0x13;
htdoughe 20:8d93acd1f8cd 115 mregids[20] = 0x14;
htdoughe 20:8d93acd1f8cd 116 mregids[21] = 0x15;
htdoughe 20:8d93acd1f8cd 117 mregids[22] = 0x16;
htdoughe 20:8d93acd1f8cd 118 mregids[23] = 0x17;
htdoughe 20:8d93acd1f8cd 119 mregids[24] = 0x18;
htdoughe 20:8d93acd1f8cd 120 mregids[25] = 0x19;
htdoughe 20:8d93acd1f8cd 121 mregids[26] = 0x1A;
htdoughe 20:8d93acd1f8cd 122 mregids[27] = 0x1B;
htdoughe 20:8d93acd1f8cd 123 mregids[28] = 0x1C;
htdoughe 20:8d93acd1f8cd 124 mregids[29] = 0x1D;
htdoughe 20:8d93acd1f8cd 125 mregids[30] = 0x1E;
htdoughe 20:8d93acd1f8cd 126 mregids[31] = 0x1F;
htdoughe 20:8d93acd1f8cd 127 mregids[32] = 0x20;
htdoughe 20:8d93acd1f8cd 128 mregids[33] = 0x21;
htdoughe 20:8d93acd1f8cd 129 mregids[34] = 0x22;
htdoughe 20:8d93acd1f8cd 130 mregids[35] = 0x23;
htdoughe 20:8d93acd1f8cd 131 mregids[36] = 0x24;
htdoughe 20:8d93acd1f8cd 132 mregids[37] = 0x25;
htdoughe 20:8d93acd1f8cd 133 mregids[38] = 0x26;
htdoughe 20:8d93acd1f8cd 134 mregids[39] = 0x27;
htdoughe 20:8d93acd1f8cd 135 mregids[40] = 0x28;
htdoughe 20:8d93acd1f8cd 136 mregids[41] = 0x29;
htdoughe 20:8d93acd1f8cd 137 mregids[42] = 0x2A;
htdoughe 20:8d93acd1f8cd 138 mregids[43] = 0x2B;
htdoughe 20:8d93acd1f8cd 139 mregids[44] = 0x2C;
htdoughe 20:8d93acd1f8cd 140 mregids[45] = 0x2D;
htdoughe 26:19823b051994 141
htdoughe 20:8d93acd1f8cd 142 mregnames[0] = "STATUS";
htdoughe 20:8d93acd1f8cd 143 mregnames[1] = "OUT_P_MSB";
htdoughe 20:8d93acd1f8cd 144 mregnames[2] = "OUT_P_CSB";
htdoughe 20:8d93acd1f8cd 145 mregnames[3] = "OUT_P_LSB";
htdoughe 20:8d93acd1f8cd 146 mregnames[4] = "OUT_T_MSB";
htdoughe 20:8d93acd1f8cd 147 mregnames[5] = "OUT_T_LSB";
htdoughe 20:8d93acd1f8cd 148 mregnames[6] = "DR_STATUS";
htdoughe 20:8d93acd1f8cd 149 mregnames[7] = "OUT_P_DELTA_MSB";
htdoughe 20:8d93acd1f8cd 150 mregnames[8] = "OUT_P_DELTA_CSB";
htdoughe 20:8d93acd1f8cd 151 mregnames[9] = "OUT_T_DELTA_MSB";
htdoughe 20:8d93acd1f8cd 152 mregnames[10] = "OUT_T_DELTA_LSB";
htdoughe 20:8d93acd1f8cd 153 mregnames[11] = "WHO_AM_I";
htdoughe 20:8d93acd1f8cd 154 mregnames[12] = "F_STATUS";
htdoughe 20:8d93acd1f8cd 155 mregnames[13] = "F_DATA";
htdoughe 20:8d93acd1f8cd 156 mregnames[14] = "F_SETUP";
htdoughe 20:8d93acd1f8cd 157 mregnames[15] = "TIME_DLY";
htdoughe 20:8d93acd1f8cd 158 mregnames[16] = "SYSMOD";
htdoughe 20:8d93acd1f8cd 159 mregnames[17] = "INT_SOURCE";
htdoughe 20:8d93acd1f8cd 160 mregnames[18] = "SOFT_RESET";
htdoughe 20:8d93acd1f8cd 161 mregnames[19] = "PT_DATA_CFG";
htdoughe 20:8d93acd1f8cd 162 mregnames[20] = "BAR_IN_MSB";
htdoughe 20:8d93acd1f8cd 163 mregnames[21] = "BAR_IN_LSB";
htdoughe 20:8d93acd1f8cd 164 mregnames[22] = "P_TGT_MSB";
htdoughe 20:8d93acd1f8cd 165 mregnames[23] = "P_TGT_LSB";
htdoughe 20:8d93acd1f8cd 166 mregnames[24] = "T_TGT";
htdoughe 20:8d93acd1f8cd 167 mregnames[25] = "P_WND_MSB";
htdoughe 20:8d93acd1f8cd 168 mregnames[26] = "P_WND_LSB";
htdoughe 20:8d93acd1f8cd 169 mregnames[27] = "T_WND";
htdoughe 20:8d93acd1f8cd 170 mregnames[28] = "P_MIN_MSB";
htdoughe 20:8d93acd1f8cd 171 mregnames[29] = "P_MIN_CSB";
htdoughe 20:8d93acd1f8cd 172 mregnames[30] = "P_MIN_LSB";
htdoughe 20:8d93acd1f8cd 173 mregnames[31] = "T_MIN_MSB";
htdoughe 20:8d93acd1f8cd 174 mregnames[32] = "T_MIN_LSB";
htdoughe 20:8d93acd1f8cd 175 mregnames[33] = "P_MAX_MSB";
htdoughe 20:8d93acd1f8cd 176 mregnames[34] = "P_MAX_CSB";
htdoughe 20:8d93acd1f8cd 177 mregnames[35] = "P_MAX_LSB";
htdoughe 20:8d93acd1f8cd 178 mregnames[36] = "T_MAX_MSB";
htdoughe 20:8d93acd1f8cd 179 mregnames[37] = "T_MAX_LSB";
htdoughe 20:8d93acd1f8cd 180 mregnames[38] = "CTRL_REG1";
htdoughe 20:8d93acd1f8cd 181 mregnames[39] = "CTRL_REG2";
htdoughe 20:8d93acd1f8cd 182 mregnames[40] = "CTRL_REG3";
htdoughe 20:8d93acd1f8cd 183 mregnames[41] = "CTRL_REG4";
htdoughe 20:8d93acd1f8cd 184 mregnames[42] = "CTRL_REG5";
htdoughe 20:8d93acd1f8cd 185 mregnames[43] = "OFF_P";
htdoughe 20:8d93acd1f8cd 186 mregnames[44] = "OFF_T";
htdoughe 20:8d93acd1f8cd 187 mregnames[45] = "OFF_H";
htdoughe 4:8065ca897f8b 188 }
htdoughe 4:8065ca897f8b 189
rmneubau 0:0f663d16e8a2 190 // Interface pulled from ADXL362.cpp
rmneubau 0:0f663d16e8a2 191 // ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :
rmneubau 0:0f663d16e8a2 192 ADXL362 adxl362(PA_0,PA_7,PA_6,PA_1);
htdoughe 23:f9461117d7e3 193
htdoughe 23:f9461117d7e3 194 // Selects SDA as I2C1_SDA on pin PB_7
htdoughe 23:f9461117d7e3 195 // Selects SCL on I2C1_SCL on pin PB_6
htdoughe 26:19823b051994 196 // The I2C address of the pressure sensor is fixed at 0x60.
htdoughe 23:f9461117d7e3 197 MPL3115A2 pressure(PB_7, PB_6, 0x60);
rmneubau 0:0f663d16e8a2 198
htdoughe 26:19823b051994 199 int adxl362_reg_print(int s, int l)
htdoughe 26:19823b051994 200 {
htdoughe 4:8065ca897f8b 201 //check s is between 0x00 and 0x2E
htdoughe 26:19823b051994 202 if(s > 0x2E || s < 0x00) {
htdoughe 1:b8716571ecac 203 printf("adx: requires start between 0x00 and 0x2E; given %d (0x%01x)\n", s,s);
htdoughe 4:8065ca897f8b 204 return -1;
htdoughe 26:19823b051994 205 } else if(l < 0) {
htdoughe 4:8065ca897f8b 206 //check length > 0
htdoughe 1:b8716571ecac 207 printf("adx: requires length >= 0, given %d\n", l);
htdoughe 4:8065ca897f8b 208 return -1;
htdoughe 26:19823b051994 209 } else {
rmneubau 0:0f663d16e8a2 210 // start sending stuff
rmneubau 0:0f663d16e8a2 211 //first check DEVID_AD == 0xAD
htdoughe 7:446c8e17a945 212 uint8_t devid = adxl362.read_reg(ADXL362::DEVID_AD);
htdoughe 26:19823b051994 213 //printf("devid = %d\n", devid);
htdoughe 26:19823b051994 214 if(devid != 0xAD) {
htdoughe 2:496a662be854 215 printf("error: DEVID_AD is not 0xAD; exiting\n");
htdoughe 4:8065ca897f8b 216 return -1;
htdoughe 26:19823b051994 217 } else {
rmneubau 0:0f663d16e8a2 218 //now do stuff
htdoughe 1:b8716571ecac 219 //if length == 0, send everything from s to end of registers
htdoughe 4:8065ca897f8b 220 //else print from s to l
htdoughe 4:8065ca897f8b 221 // formula : range = end - start - length
htdoughe 4:8065ca897f8b 222 // area = start + range
htdoughe 4:8065ca897f8b 223 int stop = 0;
htdoughe 26:19823b051994 224 if(l == 0) {
htdoughe 4:8065ca897f8b 225 stop = 34;
htdoughe 26:19823b051994 226 } else {
htdoughe 4:8065ca897f8b 227 stop = s + l;
htdoughe 4:8065ca897f8b 228 }
htdoughe 4:8065ca897f8b 229 int in = s;
htdoughe 26:19823b051994 230 while(in < stop) {
htdoughe 4:8065ca897f8b 231 //get register name
htdoughe 21:b85d1a4f0373 232 char * name = aregnames[in]; //GET NAME
htdoughe 21:b85d1a4f0373 233 ADXL362::ADXL362_register_t reg = (ADXL362::ADXL362_register_t) aregids[in];
htdoughe 8:9c9d58ca2b79 234 uint8_t val = adxl362.read_reg(reg); //GET REG VAL
htdoughe 4:8065ca897f8b 235 //print val
htdoughe 21:b85d1a4f0373 236 printf("0x%01x: %s=0x%01x\r\n", aregids[in], name, val);
htdoughe 4:8065ca897f8b 237 in++;
htdoughe 1:b8716571ecac 238 }
rmneubau 0:0f663d16e8a2 239 }
rmneubau 0:0f663d16e8a2 240 }
htdoughe 5:02aa71487c01 241 return 0;
htdoughe 5:02aa71487c01 242 }
htdoughe 5:02aa71487c01 243
htdoughe 26:19823b051994 244 void knocks()
htdoughe 26:19823b051994 245 {
htdoughe 26:19823b051994 246 int8_t x,y,z, initx, inity, initz;
htdoughe 10:8dcc46dd53bf 247 //initial values of x, y, and z.
htdoughe 10:8dcc46dd53bf 248 //These values are the baseline for the accelerometer; knocks are detected
htdoughe 10:8dcc46dd53bf 249 // in relation to these initial values
htdoughe 9:a14593af628d 250 initx=adxl362.scanx_u8();
htdoughe 9:a14593af628d 251 inity=adxl362.scany_u8();
htdoughe 9:a14593af628d 252 initz=adxl362.scanz_u8();
htdoughe 15:5ce9c63e7da2 253 int count = 0;
htdoughe 18:216cc41b55f3 254 int bs = 7;
htdoughe 26:19823b051994 255
htdoughe 5:02aa71487c01 256 while(1) {
htdoughe 10:8dcc46dd53bf 257 //get the values of x, y, and z to test for a knock
htdoughe 5:02aa71487c01 258 x=adxl362.scanx_u8();
htdoughe 5:02aa71487c01 259 y=adxl362.scany_u8();
htdoughe 5:02aa71487c01 260 z=adxl362.scanz_u8();
htdoughe 26:19823b051994 261 //if x, y, or z vary from baseline by at least bs, a knock has occured.
htdoughe 26:19823b051994 262 if(x > initx+bs || y > inity+bs || z > initz+bs || x < initx-bs || y < inity-bs || z < initz-bs) {
htdoughe 18:216cc41b55f3 263 led3 = 1;
htdoughe 15:5ce9c63e7da2 264 count++;
htdoughe 15:5ce9c63e7da2 265 printf("number of knocks: %d\r\n", count);
rmneubau 11:5aba4ea23082 266 wait_ms(2000);
htdoughe 18:216cc41b55f3 267 led3 = 0;
htdoughe 9:a14593af628d 268 }
htdoughe 16:993757c8b398 269 //printf("x = %d y = %d z = %d\r\n",x,y,z);
htdoughe 5:02aa71487c01 270 wait_ms(100);
htdoughe 5:02aa71487c01 271 }
htdoughe 1:b8716571ecac 272 }
htdoughe 16:993757c8b398 273
htdoughe 26:19823b051994 274 int mpl3115_reg_print(int s, int l)
htdoughe 26:19823b051994 275 {
htdoughe 26:19823b051994 276 if(s > 0x2D || s < 0x00) {
htdoughe 20:8d93acd1f8cd 277 printf("mpl: requires start between 0x00 and 0x20; given %d (0x%01x)\n\r", s,s);
htdoughe 20:8d93acd1f8cd 278 return -1;
htdoughe 26:19823b051994 279 } else if(l < 0) {
htdoughe 20:8d93acd1f8cd 280 //check length > 0
htdoughe 20:8d93acd1f8cd 281 printf("mpl: requires length >= 0, given %d\n\r", l);
htdoughe 20:8d93acd1f8cd 282 return -1;
htdoughe 22:1cd3cb77ec07 283 } else {
htdoughe 20:8d93acd1f8cd 284 //else do stuff
htdoughe 23:f9461117d7e3 285 uint8_t id = pressure.getID();
htdoughe 26:19823b051994 286 //printf("whoami = 0x%01x", id);
htdoughe 23:f9461117d7e3 287 if(id != 0xC4) {
htdoughe 21:b85d1a4f0373 288 printf("error: WHO_AM_I is not 0xC4; exiting\n");
htdoughe 20:8d93acd1f8cd 289 return -1;
htdoughe 22:1cd3cb77ec07 290 } else {
htdoughe 21:b85d1a4f0373 291 //now do stuff
htdoughe 21:b85d1a4f0373 292 //if length == 0, send everything from s to end of registers
htdoughe 21:b85d1a4f0373 293 //else print from s to l
htdoughe 21:b85d1a4f0373 294 // formula : range = end - start - length
htdoughe 21:b85d1a4f0373 295 // area = start + range
htdoughe 21:b85d1a4f0373 296 int stop = 0;
htdoughe 22:1cd3cb77ec07 297 if(l == 0) {
htdoughe 26:19823b051994 298 stop = 46;
htdoughe 22:1cd3cb77ec07 299 } else {
htdoughe 21:b85d1a4f0373 300 stop = s + l;
htdoughe 21:b85d1a4f0373 301 }
htdoughe 21:b85d1a4f0373 302 int in = s;
htdoughe 22:1cd3cb77ec07 303 while(in < stop) {
htdoughe 21:b85d1a4f0373 304 //get register name
htdoughe 21:b85d1a4f0373 305 char * name = mregnames[in]; //GET NAME
htdoughe 23:f9461117d7e3 306 int reg = mregids[in];
htdoughe 23:f9461117d7e3 307 uint8_t val;
htdoughe 23:f9461117d7e3 308 pressure.readRegs(reg,&val,sizeof(uint8_t)); //GET REG VAL
htdoughe 21:b85d1a4f0373 309 //print val
htdoughe 21:b85d1a4f0373 310 printf("0x%01x: %s=0x%01x\r\n", mregids[in], name, val);
htdoughe 21:b85d1a4f0373 311 in++;
htdoughe 22:1cd3cb77ec07 312 }//while
htdoughe 22:1cd3cb77ec07 313 }//else
htdoughe 22:1cd3cb77ec07 314 }//else
htdoughe 22:1cd3cb77ec07 315 return 0;
htdoughe 26:19823b051994 316 }//print mpl
htdoughe 26:19823b051994 317
htdoughe 26:19823b051994 318 int measureAlt()
htdoughe 26:19823b051994 319 {
htdoughe 28:0ed68c73dd28 320
htdoughe 26:19823b051994 321 printf("measuring things\r\n");
htdoughe 28:0ed68c73dd28 322
htdoughe 28:0ed68c73dd28 323 uint8_t id = pressure.getID();
htdoughe 32:f6664eade7fe 324 //printf("whoami = 0x%01x\r\n", id);
htdoughe 28:0ed68c73dd28 325 if(id != (uint8_t) 0xC4) {
htdoughe 28:0ed68c73dd28 326 printf("error: WHO_AM_I is not 0xC4; exiting\r\n");
htdoughe 28:0ed68c73dd28 327 return -1;
htdoughe 28:0ed68c73dd28 328 } else {
htdoughe 30:9e127911409d 329 double data[900];
htdoughe 28:0ed68c73dd28 330
htdoughe 28:0ed68c73dd28 331 int ind = 0;
htdoughe 26:19823b051994 332
htdoughe 28:0ed68c73dd28 333 //set sample_time
htdoughe 28:0ed68c73dd28 334 wait_ms(100);
htdoughe 28:0ed68c73dd28 335 uint8_t st = pressure.getCTRL_REG1();
htdoughe 30:9e127911409d 336 uint8_t msk = 0x8f;
htdoughe 31:c924aad0dc4b 337 //printf("CTL_REG1 = 0x%05x\r\n", st);
htdoughe 28:0ed68c73dd28 338 pressure.setCTRL_REG1(msk);
htdoughe 28:0ed68c73dd28 339 pressure.activate();
htdoughe 31:c924aad0dc4b 340 //printf("CTL_REG1 = 0x%05x\r\n", pressure.getCTRL_REG1());
htdoughe 28:0ed68c73dd28 341
htdoughe 26:19823b051994 342
htdoughe 28:0ed68c73dd28 343 //pressure stuff
htdoughe 28:0ed68c73dd28 344 uint8_t tmp[3] ;
htdoughe 28:0ed68c73dd28 345 uint32_t pres ;
htdoughe 26:19823b051994 346
htdoughe 20:8d93acd1f8cd 347
htdoughe 28:0ed68c73dd28 348 //GPIO pin indicates sampling should begin -- if voltage == 3.3, start
htdoughe 30:9e127911409d 349 while(ind < 900 && !pc.readable()) {
htdoughe 31:c924aad0dc4b 350 printf("measuring...\r\n");
htdoughe 26:19823b051994 351 //then we measure
htdoughe 26:19823b051994 352 //pressure and temperature sampled at 10times/second (10 hz)
htdoughe 26:19823b051994 353 //LED blinks during sampling at 1 hz (1 time/second)
htdoughe 26:19823b051994 354 led3 = 1;
htdoughe 26:19823b051994 355 for(int i = 0; i < 10; i++) {
htdoughe 30:9e127911409d 356 pres = pressure.getPressure();
htdoughe 30:9e127911409d 357 //pressure.readRegs(mregids[1], tmp, 3) ;
htdoughe 30:9e127911409d 358 //pres = ((tmp[0]<<16)|(tmp[1]<<8)|(tmp[2])) >> 6;
htdoughe 28:0ed68c73dd28 359 data[ind++] = pres;
htdoughe 26:19823b051994 360 data[ind++] = pressure.getTemperature();
htdoughe 27:a4d5c85a55e1 361 wait_ms(100);
htdoughe 26:19823b051994 362 }//for
htdoughe 26:19823b051994 363 led3 = 0;
htdoughe 26:19823b051994 364 for(int i = 0; i < 10; i++) {
htdoughe 30:9e127911409d 365 pres = pressure.getPressure();
htdoughe 30:9e127911409d 366 //pressure.readRegs(mregids[1], tmp, 3) ;
htdoughe 30:9e127911409d 367 //pres = ((tmp[0]<<16)|(tmp[1]<<8)|(tmp[2])) >> 6;
htdoughe 28:0ed68c73dd28 368 data[ind++] = pres;
htdoughe 26:19823b051994 369 data[ind++] = pressure.getTemperature();
htdoughe 27:a4d5c85a55e1 370 wait_ms(100);
htdoughe 26:19823b051994 371 }//for
htdoughe 26:19823b051994 372 }//while
htdoughe 28:0ed68c73dd28 373
htdoughe 28:0ed68c73dd28 374 int pind = 0;
htdoughe 28:0ed68c73dd28 375 int pend = ind;
htdoughe 28:0ed68c73dd28 376 char in;
htdoughe 28:0ed68c73dd28 377 int ch;
htdoughe 28:0ed68c73dd28 378 char p = 'p';
htdoughe 28:0ed68c73dd28 379 bool ex = false;
htdoughe 28:0ed68c73dd28 380 while(!ex) {
htdoughe 28:0ed68c73dd28 381 printf("p%% ");
htdoughe 28:0ed68c73dd28 382 while((ch = pc.getc()) != 13) {
htdoughe 28:0ed68c73dd28 383 pc.putc(ch);
htdoughe 28:0ed68c73dd28 384 in = ch;
htdoughe 26:19823b051994 385 }//while
htdoughe 28:0ed68c73dd28 386 if(in == p) {
htdoughe 31:c924aad0dc4b 387 while(pind < pend) {
htdoughe 28:0ed68c73dd28 388 pc.printf("\n\r%f\t%f", data[pind],data[pind+1]);
htdoughe 28:0ed68c73dd28 389 pind += 2;
htdoughe 28:0ed68c73dd28 390 ex = true;
htdoughe 28:0ed68c73dd28 391 }//while
htdoughe 28:0ed68c73dd28 392 } else {
htdoughe 28:0ed68c73dd28 393 in = 0;
htdoughe 28:0ed68c73dd28 394 }//if/else
htdoughe 28:0ed68c73dd28 395 }//while
htdoughe 28:0ed68c73dd28 396
htdoughe 28:0ed68c73dd28 397 pc.printf("\n\r");
htdoughe 26:19823b051994 398 return 0;
htdoughe 28:0ed68c73dd28 399 }//else
htdoughe 26:19823b051994 400 }//measureAlt
htdoughe 26:19823b051994 401
htdoughe 26:19823b051994 402 int main()
htdoughe 26:19823b051994 403 {
htdoughe 16:993757c8b398 404 initmap();
htdoughe 22:1cd3cb77ec07 405 minitmap();
htdoughe 16:993757c8b398 406 adxl362.reset();
htdoughe 26:19823b051994 407 pressure.activate();
htdoughe 16:993757c8b398 408 wait_ms(600); // we need to wait at least 500ms after ADXL362 reset
htdoughe 16:993757c8b398 409 adxl362.set_mode(ADXL362::MEASUREMENT);
htdoughe 16:993757c8b398 410 int start, length;
htdoughe 16:993757c8b398 411 start = 0;
htdoughe 16:993757c8b398 412 length = 0;
htdoughe 17:6a08357dbb3f 413 //while(1){
htdoughe 26:19823b051994 414 //adxl362_reg_print(start, length);
htdoughe 32:f6664eade7fe 415 mpl3115_reg_print(start, length);
htdoughe 17:6a08357dbb3f 416 //}
htdoughe 26:19823b051994 417 //knocks();
htdoughe 26:19823b051994 418
htdoughe 26:19823b051994 419 measureAlt();
htdoughe 26:19823b051994 420 //while(1);
htdoughe 16:993757c8b398 421 }