Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ADXL362 Lab7 mbed
main.cpp
00001 #include "mbed.h" 00002 #include "ADXL362.h" 00003 #include "MPL3115A2.h" 00004 #include <stdio.h> 00005 #include <stdlib.h> 00006 00007 Serial pc(SERIAL_TX, SERIAL_RX); 00008 DigitalOut myled(LED1); 00009 ADXL362 adxl362(PA_0,PA_7,PA_6,PA_1); 00010 MPL3115A2 pressure_sensor(PB_7,PB_6,0x60); 00011 InterruptIn event(PA_4); 00012 00013 char *arr[] = { 00014 "MPL_STATUS","MPL_OUT_P_MSB", "MPL_OUT_P_CSB","MPL_OUT_P_LSB","MPL_OUT_P_LSB", 00015 "MPL_OUT_T_LSB","MPL_DR_STATUS","MPL_OUT_P_DELTA_MSB","MPL_OUT_P_DELTA_MSB", 00016 "MPL_OUT_P_DELTA_LSB","MPL_OUT_T_DELTA_MSB","MPL_OUT_T_DELTA_LSB", 00017 "MPL_WHO_AM_I","MPL_F_STATUS","MPL_F_DATA","MPL_F_SETUP","MPL_TIME_DLY", 00018 "MPL_SYSMOD","MPL_INT_SOURCE","MPL_PT_DATA_CFG","MPL_BAR_IN_MSB", 00019 "MPL_BAR_IN_LSB","MPL_P_TGT_MSB","MPL_P_TGT_LSB","MPL_T_TGT","MPL_P_WND_MSB", 00020 "MPL_P_WND_LSB","MPL_T_WND","MPL_P_MIN_MSB","MPL_P_MIN_CSB","MPL_P_MIN_LSB", 00021 "MPL_T_MIN_MSB", "MPL_T_MIN_LSB", "MPL_P_MAX_MSB", "MPL_P_MAX_CSB", 00022 "MPL_P_MAX_LSB","MPL_T_MAX_MSB","MPL_T_MAX_LSB","MPL_CTRL_REG1", 00023 "MPL_CTRL_REG2","MPL_CTRL_REG3","MPL_CTRL_REG4","MPL_CTRL_REG5", 00024 "MPL_OFF_P","MPL_OFF_T","MPL_OFF_H" 00025 }; 00026 00027 00028 int adxl362_reg_print(int start, int length) { 00029 int rvalue = 0; 00030 rvalue = adxl362.read_reg(ADXL362::DEVID_AD); 00031 if(rvalue!=0xAD){ 00032 printf("value is %X\n\r",rvalue); 00033 printf("error\n\r"); 00034 return -1; 00035 } 00036 else if(!(0 <= start && start < 46)){ 00037 printf("error\n\r"); 00038 return -1; 00039 } 00040 else if (!(length >= 0)){ 00041 printf("error\n\r"); 00042 return -1; 00043 } 00044 int i = 0; 00045 00046 if (length!=0){ 00047 for (i = start; i < start+length; i++){ 00048 switch(i){ 00049 case 0 : 00050 rvalue = adxl362.read_reg(ADXL362::DEVID_AD); 00051 printf("0x00: DEVID_AD = %X \n\r", rvalue); 00052 break; 00053 case 1 : 00054 rvalue = adxl362.read_reg(ADXL362::DEVID_MST); 00055 printf("0x01: DEVID_MST = %X \n\r", rvalue); 00056 break; 00057 case 2 : 00058 rvalue = adxl362.read_reg(ADXL362::PARTID); 00059 printf("0x02: PARTID = %X \n\r", rvalue); 00060 break; 00061 case 3 : 00062 rvalue = adxl362.read_reg(ADXL362::REVID); 00063 printf("0x03: REVID = %X \n\r", rvalue); 00064 case 4 : 00065 rvalue = adxl362.read_reg(ADXL362::XDATA); 00066 printf("0x08: XDATA = %X \n\r", rvalue); 00067 break; 00068 case 5 : 00069 rvalue = adxl362.read_reg(ADXL362::YDATA); 00070 printf("0x09: YDATA = %X \n\r", rvalue); 00071 break; 00072 case 6 : 00073 rvalue = adxl362.read_reg(ADXL362::ZDATA); 00074 printf("0x0A: ZDATA = %X \n\r", rvalue); 00075 break; 00076 case 7 : 00077 rvalue = adxl362.read_reg(ADXL362::STATUS); 00078 printf("0x0B: STATUS = %X \n\r", rvalue); 00079 break; 00080 case 8 : 00081 rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_L); 00082 printf("0x0C: FIFO_ENTRIES_L = %X \n\r", rvalue); 00083 break; 00084 case 9 : 00085 rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_H); 00086 printf("0x0D: FIFO_ENTRIES_H = %X \n\r", rvalue); 00087 break; 00088 case 10 : 00089 rvalue = adxl362.read_reg(ADXL362::XDATA_L); 00090 printf("0x0E: XDATA_L = %X \n\r", rvalue); 00091 break; 00092 case 11 : 00093 rvalue = adxl362.read_reg(ADXL362::XDATA_H); 00094 printf("0x0F: XDATA_H = %X \n\r", rvalue); 00095 break; 00096 case 12 : 00097 rvalue = adxl362.read_reg(ADXL362::YDATA_L); 00098 printf("0x10: YDATA_L = %X \n\r", rvalue); 00099 break; 00100 case 13 : 00101 rvalue = adxl362.read_reg(ADXL362::YDATA_H); 00102 printf("0x11: YDATA_H = %X \n\r", rvalue); 00103 break; 00104 case 14 : 00105 rvalue = adxl362.read_reg(ADXL362::ZDATA_L); 00106 printf("0x12: ZDATA_L = %X \n\r", rvalue); 00107 break; 00108 case 15 : 00109 rvalue = adxl362.read_reg(ADXL362::ZDATA_H); 00110 printf("0x13: ZDATA_H = %X \n\r", rvalue); 00111 break; 00112 case 16 : 00113 rvalue = adxl362.read_reg(ADXL362::TEMP_L); 00114 printf("0x14: TEMP_L = %X \n\r", rvalue); 00115 break; 00116 case 17 : 00117 rvalue = adxl362.read_reg(ADXL362::TEMP_H); 00118 printf("0x15: TEMP_H = %X \n\r", rvalue); 00119 break; 00120 case 18 : 00121 rvalue = adxl362.read_reg(ADXL362::SOFT_RESET); 00122 printf("0x1F: SOFT_RESET = %X \n\r", rvalue); 00123 break; 00124 case 19 : 00125 rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_L); 00126 printf("0x20: THRESH_ACT_L = %X \n\r", rvalue); 00127 break; 00128 case 20 : 00129 rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_H); 00130 printf("0x21: THRESH_ACT_H = %X \n\r", rvalue); 00131 break; 00132 case 21 : 00133 rvalue = adxl362.read_reg(ADXL362::TIME_ACT); 00134 printf("0x22: TIME_ACT = %X \n\r", rvalue); 00135 break; 00136 case 22 : 00137 rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_L); 00138 printf("0x23: THRESH_INACT_L = %X \n\r", rvalue); 00139 break; 00140 case 23 : 00141 rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_H); 00142 printf("0x24: THRESH_INACT_H = %X \n\r", rvalue); 00143 break; 00144 case 24 : 00145 rvalue = adxl362.read_reg(ADXL362::TIME_INACT_L); 00146 printf("0x25: TIME_INACT_L = %X \n\r", rvalue); 00147 break; 00148 case 25 : 00149 rvalue = adxl362.read_reg(ADXL362::TIME_INACT_H); 00150 printf("0x26: TIME_INACT_H = %X \n\r", rvalue); 00151 break; 00152 case 26 : 00153 rvalue = adxl362.read_reg(ADXL362::ACT_INACT_CTL); 00154 printf("0x27: ACT_INACT_CTL = %X \n\r", rvalue); 00155 break; 00156 case 27 : 00157 rvalue = adxl362.read_reg(ADXL362::FIFO_CONTROL); 00158 printf("0x28: FIFO_CONTROL = %X \n\r", rvalue); 00159 break; 00160 case 28 : 00161 rvalue = adxl362.read_reg(ADXL362::FIFO_SAMPLES); 00162 printf("0x29: FIFO_SAMPLES = %X \n\r", rvalue); 00163 break; 00164 case 29 : 00165 rvalue = adxl362.read_reg(ADXL362::INTMAP1); 00166 printf("0x2A: INTMAP1 = %X \n\r", rvalue); 00167 break; 00168 case 30 : 00169 rvalue = adxl362.read_reg(ADXL362::INTMAP2); 00170 printf("0x2B: INTMAP2 = %X \n\r", rvalue); 00171 break; 00172 case 31 : 00173 rvalue = adxl362.read_reg(ADXL362::FILTER_CTL); 00174 printf("0x2C: FILTER_CTL = %X \n\r", rvalue); 00175 break; 00176 case 32 : 00177 rvalue = adxl362.read_reg(ADXL362::POWER_CTL); 00178 printf("0x2D: POWER_CTL = %X \n\r", rvalue); 00179 break; 00180 case 33 : 00181 rvalue = adxl362.read_reg(ADXL362::SELF_TEST); 00182 printf("0x2E: SELF_TEST = %X \n\r", rvalue); 00183 break; 00184 default : 00185 printf("ERROR: NO REGISTER HERE\n\r"); 00186 break; 00187 } 00188 } 00189 } 00190 else { 00191 for (i = 0; i < 34; i++){ 00192 switch(i){ 00193 case 0 : 00194 rvalue = adxl362.read_reg(ADXL362::DEVID_AD); 00195 printf("0x00: DEVID_AD = %X \n\r", rvalue); 00196 break; 00197 case 1 : 00198 rvalue = adxl362.read_reg(ADXL362::DEVID_MST); 00199 printf("0x01: DEVID_MST = %X \n\r", rvalue); 00200 break; 00201 case 2 : 00202 rvalue = adxl362.read_reg(ADXL362::PARTID); 00203 printf("0x02: PARTID = %X \n\r", rvalue); 00204 break; 00205 case 3 : 00206 rvalue = adxl362.read_reg(ADXL362::REVID); 00207 printf("0x03: REVID = %X \n\r", rvalue); 00208 break; 00209 case 4 : 00210 rvalue = adxl362.read_reg(ADXL362::XDATA); 00211 printf("0x08: XDATA = %X \n\r", rvalue); 00212 break; 00213 case 5 : 00214 rvalue = adxl362.read_reg(ADXL362::YDATA); 00215 printf("0x09: YDATA = %X \n\r", rvalue); 00216 break; 00217 case 6 : 00218 rvalue = adxl362.read_reg(ADXL362::ZDATA); 00219 printf("0x0A: ZDATA = %X \n\r", rvalue); 00220 break; 00221 case 7 : 00222 rvalue = adxl362.read_reg(ADXL362::STATUS); 00223 printf("0x0B: STATUS = %X \n\r", rvalue); 00224 break; 00225 case 8 : 00226 rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_L); 00227 printf("0x0C: FIFO_ENTRIES_L = %X \n\r", rvalue); 00228 break; 00229 case 9 : 00230 rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_H); 00231 printf("0x0D: FIFO_ENTRIES_H = %X \n\r", rvalue); 00232 break; 00233 case 10 : 00234 rvalue = adxl362.read_reg(ADXL362::XDATA_L); 00235 printf("0x0E: XDATA_L = %X \n\r", rvalue); 00236 break; 00237 case 11 : 00238 rvalue = adxl362.read_reg(ADXL362::XDATA_H); 00239 printf("0x0F: XDATA_H = %X \n\r", rvalue); 00240 break; 00241 case 12 : 00242 rvalue = adxl362.read_reg(ADXL362::YDATA_L); 00243 printf("0x10: YDATA_L = %X \n\r", rvalue); 00244 break; 00245 case 13 : 00246 rvalue = adxl362.read_reg(ADXL362::YDATA_H); 00247 printf("0x11: YDATA_H = %X \n\r", rvalue); 00248 break; 00249 case 14 : 00250 rvalue = adxl362.read_reg(ADXL362::ZDATA_L); 00251 printf("0x12: ZDATA_L = %X \n\r", rvalue); 00252 break; 00253 case 15 : 00254 rvalue = adxl362.read_reg(ADXL362::ZDATA_H); 00255 printf("0x13: ZDATA_H = %X \n\r", rvalue); 00256 break; 00257 case 16 : 00258 rvalue = adxl362.read_reg(ADXL362::TEMP_L); 00259 printf("0x14: TEMP_L = %X \n\r", rvalue); 00260 break; 00261 case 17 : 00262 rvalue = adxl362.read_reg(ADXL362::TEMP_H); 00263 printf("0x15: TEMP_H = %X \n\r", rvalue); 00264 break; 00265 case 18 : 00266 rvalue = adxl362.read_reg(ADXL362::SOFT_RESET); 00267 printf("0x1F: SOFT_RESET = %X \n\r", rvalue); 00268 break; 00269 case 19 : 00270 rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_L); 00271 printf("0x20: THRESH_ACT_L = %X \n\r", rvalue); 00272 break; 00273 case 20 : 00274 rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_H); 00275 printf("0x21: THRESH_ACT_H = %X \n\r", rvalue); 00276 break; 00277 case 21 : 00278 rvalue = adxl362.read_reg(ADXL362::TIME_ACT); 00279 printf("0x22: TIME_ACT = %X \n\r", rvalue); 00280 break; 00281 case 22 : 00282 rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_L); 00283 printf("0x23: THRESH_INACT_L = %X \n\r", rvalue); 00284 break; 00285 case 23 : 00286 rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_H); 00287 printf("0x24: THRESH_INACT_H = %X \n\r", rvalue); 00288 break; 00289 case 24 : 00290 rvalue = adxl362.read_reg(ADXL362::TIME_INACT_L); 00291 printf("0x25: TIME_INACT_L = %X \n\r", rvalue); 00292 break; 00293 case 25 : 00294 rvalue = adxl362.read_reg(ADXL362::TIME_INACT_H); 00295 printf("0x26: TIME_INACT_H = %X \n\r", rvalue); 00296 break; 00297 case 26 : 00298 rvalue = adxl362.read_reg(ADXL362::ACT_INACT_CTL); 00299 printf("0x27: ACT_INACT_CTL = %X \n\r", rvalue); 00300 break; 00301 case 27 : 00302 rvalue = adxl362.read_reg(ADXL362::FIFO_CONTROL); 00303 printf("0x28: FIFO_CONTROL = %X \n\r", rvalue); 00304 break; 00305 case 28 : 00306 rvalue = adxl362.read_reg(ADXL362::FIFO_SAMPLES); 00307 printf("0x29: FIFO_SAMPLES = %X \n\r", rvalue); 00308 break; 00309 case 29 : 00310 rvalue = adxl362.read_reg(ADXL362::INTMAP1); 00311 printf("0x2A: INTMAP1 = %X \n\r", rvalue); 00312 break; 00313 case 30 : 00314 rvalue = adxl362.read_reg(ADXL362::INTMAP2); 00315 printf("0x2B: INTMAP2 = %X \n\r", rvalue); 00316 break; 00317 case 31 : 00318 rvalue = adxl362.read_reg(ADXL362::FILTER_CTL); 00319 printf("0x2C: FILTER_CTL = %X \n\r", rvalue); 00320 break; 00321 case 32 : 00322 rvalue = adxl362.read_reg(ADXL362::POWER_CTL); 00323 printf("0x2D: POWER_CTL = %X \n\r", rvalue); 00324 break; 00325 case 33 : 00326 rvalue = adxl362.read_reg(ADXL362::SELF_TEST); 00327 printf("0x2E: SELF_TEST = %X \n\r", rvalue); 00328 break; 00329 default : 00330 printf("ERROR: NO REGISTER HERE\n\r"); 00331 break; 00332 } 00333 } 00334 } 00335 00336 return 0; 00337 } 00338 00339 int blink() { 00340 myled = 1; // LED is ON 00341 wait(2); // 2 sec 00342 myled = 0; // LED is OFF 00343 return 0; 00344 } 00345 00346 int mpl3115_reg_print(int start, int length){ 00347 00348 uint8_t id; 00349 00350 if ((start < 0) || (start > 45)) { 00351 pc.printf("break 1 \n\r"); 00352 return -1; 00353 } 00354 if (length < 0) { 00355 pc.printf("break 2 \n\r"); 00356 return -1; 00357 } 00358 id = pressure_sensor.getID(); 00359 if (id!=0xC4) { 00360 pc.printf("break 3 \n\r"); 00361 return -1; 00362 } 00363 00364 uint8_t a[45]; 00365 00366 pressure_sensor.readRegs(start, a, length); 00367 00368 int i = 0; 00369 for (i=0;i<length;i++){ 00370 pc.printf("0x%X: %s is 0x%X \n\r",i, arr[i], a[i]); 00371 } 00372 return 0; 00373 00374 } 00375 00376 int printA(double* ar1, double* ar2, int start, int end){ 00377 int i = 0; 00378 for (i = start; i < end; i++){ 00379 pc.printf("value at %d : temp: %f pressure: %f \n\r",i,ar1[i], ar2[i]); 00380 } 00381 return 0; 00382 } 00383 00384 int main() { 00385 int arraySize = 250; //approximately the time it takes to ride one elevator floors 1-6 00386 double altitudeReading[arraySize]; 00387 double tempReading[arraySize]; 00388 int i = 0, j = 0; 00389 00390 j = mpl3115_reg_print(0, 45); 00391 00392 for (i = 0; i < arraySize; i++) { 00393 altitudeReading[i] = -1; 00394 } 00395 for(j = 0; j < arraySize; j++) { 00396 tempReading[j] = -1; 00397 } 00398 i = 0; 00399 pc.printf("reading an altitude at this point at 10hz\r\n"); 00400 pc.printf("Enter p to print, enter s to stop: "); 00401 while (1) { 00402 wait_us(100); 00403 altitudeReading[i] = pressure_sensor.getAltitude(); 00404 i++; 00405 tempReading[j] = pressure_sensor.getTemperature(); 00406 j++; 00407 if (i > arraySize) { 00408 i = 0; 00409 } 00410 if( j > arraySize) { 00411 j = 0; 00412 } 00413 if (pc.readable()) { 00414 char c = pc.getc(); 00415 pc.printf("we read a char, it was %c\r\n",c); 00416 if (c == 'p') { //press p to show what is currently in the array 00417 pc.printf("read a p\r\n"); 00418 int h = 0; 00419 for (h = 0; h < arraySize; h++) { 00420 pc.printf("temperature = %f, altitude = %f\r\n", tempReading[h], altitudeReading[h]); 00421 } 00422 } 00423 if( c == 's') { //press s to get it to stop reading 00424 break; 00425 } 00426 } 00427 00428 } 00429 00430 00431 00432 00433 00434 00435 00436 00437 /* Lab 6 work 00438 00439 wait_ms(600); // we need to wait at least 500ms after ADXL362 reset 00440 adxl362.set_mode(ADXL362::MEASUREMENT); 00441 int8_t x,y,z; 00442 int8_t nx, ny, nz; 00443 adxl362_reg_print(0, 0); // call register printing here 00444 adxl362_reg_print(0, 5); 00445 adxl362_reg_print(4, 6); 00446 //while (1) {adxl362_reg_print(0, 0);} to print forever 00447 00448 int blink_c = 0; 00449 x=adxl362.scanx_u8(); 00450 y=adxl362.scany_u8(); 00451 z=adxl362.scanz_u8(); 00452 00453 while(1) { //detects knocks 00454 x=adxl362.scanx_u8(); 00455 y=adxl362.scany_u8(); 00456 z=adxl362.scanz_u8(); 00457 wait_us(100); 00458 nx=adxl362.scanx_u8(); 00459 ny=adxl362.scany_u8(); 00460 nz=adxl362.scanz_u8(); 00461 if ((abs(x-nx)>=4) || (abs(y-ny)>=4) || (abs(z-nz)>=4)){ 00462 blink_c += 1; 00463 printf("number of knocks detected: %d\n\r",blink_c); 00464 blink(); 00465 } 00466 } */ 00467 00468 }
Generated on Fri Jul 15 2022 17:46:58 by
1.7.2