report
Dependencies: ADXL362 Lab7 mbed
main.cpp
- Committer:
- dprowe
- Date:
- 2018-03-09
- Revision:
- 9:1f9c70fde134
- Parent:
- 7:ff64fb98ac1b
File content as of revision 9:1f9c70fde134:
#include "mbed.h" #include "ADXL362.h" #include "MPL3115A2.h" #include <stdio.h> #include <stdlib.h> Serial pc(SERIAL_TX, SERIAL_RX); DigitalOut myled(LED1); ADXL362 adxl362(PA_0,PA_7,PA_6,PA_1); MPL3115A2 pressure_sensor(PB_7,PB_6,0x60); InterruptIn event(PA_4); char *arr[] = { "MPL_STATUS","MPL_OUT_P_MSB", "MPL_OUT_P_CSB","MPL_OUT_P_LSB","MPL_OUT_P_LSB", "MPL_OUT_T_LSB","MPL_DR_STATUS","MPL_OUT_P_DELTA_MSB","MPL_OUT_P_DELTA_MSB", "MPL_OUT_P_DELTA_LSB","MPL_OUT_T_DELTA_MSB","MPL_OUT_T_DELTA_LSB", "MPL_WHO_AM_I","MPL_F_STATUS","MPL_F_DATA","MPL_F_SETUP","MPL_TIME_DLY", "MPL_SYSMOD","MPL_INT_SOURCE","MPL_PT_DATA_CFG","MPL_BAR_IN_MSB", "MPL_BAR_IN_LSB","MPL_P_TGT_MSB","MPL_P_TGT_LSB","MPL_T_TGT","MPL_P_WND_MSB", "MPL_P_WND_LSB","MPL_T_WND","MPL_P_MIN_MSB","MPL_P_MIN_CSB","MPL_P_MIN_LSB", "MPL_T_MIN_MSB", "MPL_T_MIN_LSB", "MPL_P_MAX_MSB", "MPL_P_MAX_CSB", "MPL_P_MAX_LSB","MPL_T_MAX_MSB","MPL_T_MAX_LSB","MPL_CTRL_REG1", "MPL_CTRL_REG2","MPL_CTRL_REG3","MPL_CTRL_REG4","MPL_CTRL_REG5", "MPL_OFF_P","MPL_OFF_T","MPL_OFF_H" }; int adxl362_reg_print(int start, int length) { int rvalue = 0; rvalue = adxl362.read_reg(ADXL362::DEVID_AD); if(rvalue!=0xAD){ printf("value is %X\n\r",rvalue); printf("error\n\r"); return -1; } else if(!(0 <= start && start < 46)){ printf("error\n\r"); return -1; } else if (!(length >= 0)){ printf("error\n\r"); return -1; } int i = 0; if (length!=0){ for (i = start; i < start+length; i++){ switch(i){ case 0 : rvalue = adxl362.read_reg(ADXL362::DEVID_AD); printf("0x00: DEVID_AD = %X \n\r", rvalue); break; case 1 : rvalue = adxl362.read_reg(ADXL362::DEVID_MST); printf("0x01: DEVID_MST = %X \n\r", rvalue); break; case 2 : rvalue = adxl362.read_reg(ADXL362::PARTID); printf("0x02: PARTID = %X \n\r", rvalue); break; case 3 : rvalue = adxl362.read_reg(ADXL362::REVID); printf("0x03: REVID = %X \n\r", rvalue); case 4 : rvalue = adxl362.read_reg(ADXL362::XDATA); printf("0x08: XDATA = %X \n\r", rvalue); break; case 5 : rvalue = adxl362.read_reg(ADXL362::YDATA); printf("0x09: YDATA = %X \n\r", rvalue); break; case 6 : rvalue = adxl362.read_reg(ADXL362::ZDATA); printf("0x0A: ZDATA = %X \n\r", rvalue); break; case 7 : rvalue = adxl362.read_reg(ADXL362::STATUS); printf("0x0B: STATUS = %X \n\r", rvalue); break; case 8 : rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_L); printf("0x0C: FIFO_ENTRIES_L = %X \n\r", rvalue); break; case 9 : rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_H); printf("0x0D: FIFO_ENTRIES_H = %X \n\r", rvalue); break; case 10 : rvalue = adxl362.read_reg(ADXL362::XDATA_L); printf("0x0E: XDATA_L = %X \n\r", rvalue); break; case 11 : rvalue = adxl362.read_reg(ADXL362::XDATA_H); printf("0x0F: XDATA_H = %X \n\r", rvalue); break; case 12 : rvalue = adxl362.read_reg(ADXL362::YDATA_L); printf("0x10: YDATA_L = %X \n\r", rvalue); break; case 13 : rvalue = adxl362.read_reg(ADXL362::YDATA_H); printf("0x11: YDATA_H = %X \n\r", rvalue); break; case 14 : rvalue = adxl362.read_reg(ADXL362::ZDATA_L); printf("0x12: ZDATA_L = %X \n\r", rvalue); break; case 15 : rvalue = adxl362.read_reg(ADXL362::ZDATA_H); printf("0x13: ZDATA_H = %X \n\r", rvalue); break; case 16 : rvalue = adxl362.read_reg(ADXL362::TEMP_L); printf("0x14: TEMP_L = %X \n\r", rvalue); break; case 17 : rvalue = adxl362.read_reg(ADXL362::TEMP_H); printf("0x15: TEMP_H = %X \n\r", rvalue); break; case 18 : rvalue = adxl362.read_reg(ADXL362::SOFT_RESET); printf("0x1F: SOFT_RESET = %X \n\r", rvalue); break; case 19 : rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_L); printf("0x20: THRESH_ACT_L = %X \n\r", rvalue); break; case 20 : rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_H); printf("0x21: THRESH_ACT_H = %X \n\r", rvalue); break; case 21 : rvalue = adxl362.read_reg(ADXL362::TIME_ACT); printf("0x22: TIME_ACT = %X \n\r", rvalue); break; case 22 : rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_L); printf("0x23: THRESH_INACT_L = %X \n\r", rvalue); break; case 23 : rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_H); printf("0x24: THRESH_INACT_H = %X \n\r", rvalue); break; case 24 : rvalue = adxl362.read_reg(ADXL362::TIME_INACT_L); printf("0x25: TIME_INACT_L = %X \n\r", rvalue); break; case 25 : rvalue = adxl362.read_reg(ADXL362::TIME_INACT_H); printf("0x26: TIME_INACT_H = %X \n\r", rvalue); break; case 26 : rvalue = adxl362.read_reg(ADXL362::ACT_INACT_CTL); printf("0x27: ACT_INACT_CTL = %X \n\r", rvalue); break; case 27 : rvalue = adxl362.read_reg(ADXL362::FIFO_CONTROL); printf("0x28: FIFO_CONTROL = %X \n\r", rvalue); break; case 28 : rvalue = adxl362.read_reg(ADXL362::FIFO_SAMPLES); printf("0x29: FIFO_SAMPLES = %X \n\r", rvalue); break; case 29 : rvalue = adxl362.read_reg(ADXL362::INTMAP1); printf("0x2A: INTMAP1 = %X \n\r", rvalue); break; case 30 : rvalue = adxl362.read_reg(ADXL362::INTMAP2); printf("0x2B: INTMAP2 = %X \n\r", rvalue); break; case 31 : rvalue = adxl362.read_reg(ADXL362::FILTER_CTL); printf("0x2C: FILTER_CTL = %X \n\r", rvalue); break; case 32 : rvalue = adxl362.read_reg(ADXL362::POWER_CTL); printf("0x2D: POWER_CTL = %X \n\r", rvalue); break; case 33 : rvalue = adxl362.read_reg(ADXL362::SELF_TEST); printf("0x2E: SELF_TEST = %X \n\r", rvalue); break; default : printf("ERROR: NO REGISTER HERE\n\r"); break; } } } else { for (i = 0; i < 34; i++){ switch(i){ case 0 : rvalue = adxl362.read_reg(ADXL362::DEVID_AD); printf("0x00: DEVID_AD = %X \n\r", rvalue); break; case 1 : rvalue = adxl362.read_reg(ADXL362::DEVID_MST); printf("0x01: DEVID_MST = %X \n\r", rvalue); break; case 2 : rvalue = adxl362.read_reg(ADXL362::PARTID); printf("0x02: PARTID = %X \n\r", rvalue); break; case 3 : rvalue = adxl362.read_reg(ADXL362::REVID); printf("0x03: REVID = %X \n\r", rvalue); break; case 4 : rvalue = adxl362.read_reg(ADXL362::XDATA); printf("0x08: XDATA = %X \n\r", rvalue); break; case 5 : rvalue = adxl362.read_reg(ADXL362::YDATA); printf("0x09: YDATA = %X \n\r", rvalue); break; case 6 : rvalue = adxl362.read_reg(ADXL362::ZDATA); printf("0x0A: ZDATA = %X \n\r", rvalue); break; case 7 : rvalue = adxl362.read_reg(ADXL362::STATUS); printf("0x0B: STATUS = %X \n\r", rvalue); break; case 8 : rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_L); printf("0x0C: FIFO_ENTRIES_L = %X \n\r", rvalue); break; case 9 : rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_H); printf("0x0D: FIFO_ENTRIES_H = %X \n\r", rvalue); break; case 10 : rvalue = adxl362.read_reg(ADXL362::XDATA_L); printf("0x0E: XDATA_L = %X \n\r", rvalue); break; case 11 : rvalue = adxl362.read_reg(ADXL362::XDATA_H); printf("0x0F: XDATA_H = %X \n\r", rvalue); break; case 12 : rvalue = adxl362.read_reg(ADXL362::YDATA_L); printf("0x10: YDATA_L = %X \n\r", rvalue); break; case 13 : rvalue = adxl362.read_reg(ADXL362::YDATA_H); printf("0x11: YDATA_H = %X \n\r", rvalue); break; case 14 : rvalue = adxl362.read_reg(ADXL362::ZDATA_L); printf("0x12: ZDATA_L = %X \n\r", rvalue); break; case 15 : rvalue = adxl362.read_reg(ADXL362::ZDATA_H); printf("0x13: ZDATA_H = %X \n\r", rvalue); break; case 16 : rvalue = adxl362.read_reg(ADXL362::TEMP_L); printf("0x14: TEMP_L = %X \n\r", rvalue); break; case 17 : rvalue = adxl362.read_reg(ADXL362::TEMP_H); printf("0x15: TEMP_H = %X \n\r", rvalue); break; case 18 : rvalue = adxl362.read_reg(ADXL362::SOFT_RESET); printf("0x1F: SOFT_RESET = %X \n\r", rvalue); break; case 19 : rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_L); printf("0x20: THRESH_ACT_L = %X \n\r", rvalue); break; case 20 : rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_H); printf("0x21: THRESH_ACT_H = %X \n\r", rvalue); break; case 21 : rvalue = adxl362.read_reg(ADXL362::TIME_ACT); printf("0x22: TIME_ACT = %X \n\r", rvalue); break; case 22 : rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_L); printf("0x23: THRESH_INACT_L = %X \n\r", rvalue); break; case 23 : rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_H); printf("0x24: THRESH_INACT_H = %X \n\r", rvalue); break; case 24 : rvalue = adxl362.read_reg(ADXL362::TIME_INACT_L); printf("0x25: TIME_INACT_L = %X \n\r", rvalue); break; case 25 : rvalue = adxl362.read_reg(ADXL362::TIME_INACT_H); printf("0x26: TIME_INACT_H = %X \n\r", rvalue); break; case 26 : rvalue = adxl362.read_reg(ADXL362::ACT_INACT_CTL); printf("0x27: ACT_INACT_CTL = %X \n\r", rvalue); break; case 27 : rvalue = adxl362.read_reg(ADXL362::FIFO_CONTROL); printf("0x28: FIFO_CONTROL = %X \n\r", rvalue); break; case 28 : rvalue = adxl362.read_reg(ADXL362::FIFO_SAMPLES); printf("0x29: FIFO_SAMPLES = %X \n\r", rvalue); break; case 29 : rvalue = adxl362.read_reg(ADXL362::INTMAP1); printf("0x2A: INTMAP1 = %X \n\r", rvalue); break; case 30 : rvalue = adxl362.read_reg(ADXL362::INTMAP2); printf("0x2B: INTMAP2 = %X \n\r", rvalue); break; case 31 : rvalue = adxl362.read_reg(ADXL362::FILTER_CTL); printf("0x2C: FILTER_CTL = %X \n\r", rvalue); break; case 32 : rvalue = adxl362.read_reg(ADXL362::POWER_CTL); printf("0x2D: POWER_CTL = %X \n\r", rvalue); break; case 33 : rvalue = adxl362.read_reg(ADXL362::SELF_TEST); printf("0x2E: SELF_TEST = %X \n\r", rvalue); break; default : printf("ERROR: NO REGISTER HERE\n\r"); break; } } } return 0; } int blink() { myled = 1; // LED is ON wait(2); // 2 sec myled = 0; // LED is OFF return 0; } int mpl3115_reg_print(int start, int length){ uint8_t id; if ((start < 0) || (start > 45)) { pc.printf("break 1 \n\r"); return -1; } if (length < 0) { pc.printf("break 2 \n\r"); return -1; } id = pressure_sensor.getID(); if (id!=0xC4) { pc.printf("break 3 \n\r"); return -1; } uint8_t a[45]; pressure_sensor.readRegs(start, a, length); int i = 0; for (i=0;i<length;i++){ pc.printf("0x%X: %s is 0x%X \n\r",i, arr[i], a[i]); } return 0; } int printA(double* ar1, double* ar2, int start, int end){ int i = 0; for (i = start; i < end; i++){ pc.printf("value at %d : temp: %f pressure: %f \n\r",i,ar1[i], ar2[i]); } return 0; } int main() { int arraySize = 250; //approximately the time it takes to ride one elevator floors 1-6 double altitudeReading[arraySize]; double tempReading[arraySize]; int i = 0, j = 0; j = mpl3115_reg_print(0, 45); for (i = 0; i < arraySize; i++) { altitudeReading[i] = -1; } for(j = 0; j < arraySize; j++) { tempReading[j] = -1; } i = 0; pc.printf("reading an altitude at this point at 10hz\r\n"); pc.printf("Enter p to print, enter s to stop: "); while (1) { wait_us(100); altitudeReading[i] = pressure_sensor.getAltitude(); i++; tempReading[j] = pressure_sensor.getTemperature(); j++; if (i > arraySize) { i = 0; } if( j > arraySize) { j = 0; } if (pc.readable()) { char c = pc.getc(); pc.printf("we read a char, it was %c\r\n",c); if (c == 'p') { //press p to show what is currently in the array pc.printf("read a p\r\n"); int h = 0; for (h = 0; h < arraySize; h++) { pc.printf("temperature = %f, altitude = %f\r\n", tempReading[h], altitudeReading[h]); } } if( c == 's') { //press s to get it to stop reading break; } } } /* Lab 6 work wait_ms(600); // we need to wait at least 500ms after ADXL362 reset adxl362.set_mode(ADXL362::MEASUREMENT); int8_t x,y,z; int8_t nx, ny, nz; adxl362_reg_print(0, 0); // call register printing here adxl362_reg_print(0, 5); adxl362_reg_print(4, 6); //while (1) {adxl362_reg_print(0, 0);} to print forever int blink_c = 0; x=adxl362.scanx_u8(); y=adxl362.scany_u8(); z=adxl362.scanz_u8(); while(1) { //detects knocks x=adxl362.scanx_u8(); y=adxl362.scany_u8(); z=adxl362.scanz_u8(); wait_us(100); nx=adxl362.scanx_u8(); ny=adxl362.scany_u8(); nz=adxl362.scanz_u8(); if ((abs(x-nx)>=4) || (abs(y-ny)>=4) || (abs(z-nz)>=4)){ blink_c += 1; printf("number of knocks detected: %d\n\r",blink_c); blink(); } } */ }