lab5
Dependencies: ADXL362
main.cpp
- Committer:
- m0t0
- Date:
- 2018-03-02
- Revision:
- 1:839c14f3143c
- Parent:
- 0:cf970e75e1ae
File content as of revision 1:839c14f3143c:
#include "mbed.h" #include "ADXL362.h" DigitalOut led1(LED1); // Interface pulled from ADXL362.cpp // ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) : ADXL362 adxl362(PA_0,PA_7,PA_6,PA_1); int adxl362_reg_print(int start, int length){ typedef enum { DEVID_AD = 0x00, DEVID_MST = 0x01, PARTID = 0x02, REVID = 0x03, XDATA = 0x08, YDATA = 0x09, ZDATA = 0x0A, STATUS = 0x0B, FIFO_ENTRIES_L = 0x0C, FIFO_ENTRIES_H = 0x0D, XDATA_L = 0x0E, XDATA_H = 0x0F, YDATA_L = 0x10, YDATA_H = 0x11, ZDATA_L = 0x12, ZDATA_H = 0x13, TEMP_L = 0x14, TEMP_H = 0x15, // Reserved = 0x16; // Reserved = 0x17; SOFT_RESET = 0x1F, THRESH_ACT_L = 0x20, THRESH_ACT_H = 0x21, TIME_ACT = 0x22, THRESH_INACT_L = 0x23, THRESH_INACT_H = 0x24, TIME_INACT_L = 0x25, TIME_INACT_H = 0x26, ACT_INACT_CTL = 0x27, FIFO_CONTROL = 0x28, FIFO_SAMPLES = 0x29, INTMAP1 = 0x2A, INTMAP2 = 0x2B, FILTER_CTL = 0x2C, POWER_CTL = 0x2D, SELF_TEST = 0x2E, } ADXL362_register_t; char *regnames[34] = {"DEVID_AD","DEVID_MST","PARTID","REVID","XDATA","YDATA","ZDATA","STATUS","FIFO_ENTRIES_L", "FIFO_ENTRIES_H","XDATA_L","XDATA_H","YDATA_L","YDATA_H","ZDATA_L","ZDATA_H","TEMP_L", "TEMP_H","SOFT_RESET","THRESH_ACT_L","THRESH_ACT_H","TIME_ACT","THRESH_INACT_L","THRESH_INACT_H","TIME_INACT_L","TIME_INACT_H", "ACT_INACT_CTL","FIFO_CONTROL","FIFO_SAMPLES","INTMAP1","INTMAP2","FILTER_CTL","POWER_CTL", "SELF_TEST"}; int val1[34] = { 0x00, 0x01,0x02,0x03,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E}; if(0x00<=start && start <=0x2E){ if(length>0){ int j = 0; //uint8_t adreg = read_reg(ADXL362::DEVID_AD); for(int x = start; x<=length; x++){ int val = val1[x]; switch(val){ case(ADXL362::DEVID_AD): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x],val); break; case(ADXL362::DEVID_MST): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::PARTID): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::REVID): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::XDATA): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::YDATA): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::ZDATA): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::STATUS): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::FIFO_ENTRIES_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::FIFO_ENTRIES_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::XDATA_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::XDATA_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::YDATA_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::YDATA_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::ZDATA_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::ZDATA_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::TEMP_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::TEMP_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::SOFT_RESET): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::THRESH_ACT_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::THRESH_ACT_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::TIME_ACT): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::THRESH_INACT_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::THRESH_INACT_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::TIME_INACT_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::TIME_INACT_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::ACT_INACT_CTL): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::INTMAP1): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::INTMAP2): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::FILTER_CTL): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::POWER_CTL): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::SELF_TEST): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::FIFO_CONTROL): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::FIFO_SAMPLES): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; default: printf("test%0x", val); } j++; } } else if(length==0){ int j = 0; //uint8_t adreg = read_reg(ADXL362::DEVID_AD); for(int x = start; x<34; x++){ int val=val1[x]; //printf("> %0x: %s=%0x \n\r", x, regnames[x],val); switch(val){ case(ADXL362::DEVID_AD): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x],val); break; case(ADXL362::DEVID_MST): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::PARTID): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::REVID): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::XDATA): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::YDATA): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::ZDATA): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::STATUS): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::FIFO_ENTRIES_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::FIFO_ENTRIES_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::XDATA_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::XDATA_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::YDATA_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::YDATA_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::ZDATA_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::ZDATA_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::TEMP_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::TEMP_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::SOFT_RESET): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::THRESH_ACT_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::THRESH_ACT_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::TIME_ACT): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::THRESH_INACT_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::THRESH_INACT_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::TIME_INACT_L): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::TIME_INACT_H): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::ACT_INACT_CTL): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::INTMAP1): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::INTMAP2): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::FILTER_CTL): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::POWER_CTL): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::SELF_TEST): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::FIFO_CONTROL): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; case(ADXL362::FIFO_SAMPLES): printf("0x%0x: %s=0x%0x \n\r", j, regnames[x], val); break; default: printf("MISSING: test%0x\n\r", val); } j++; } } else{ free(regnames); return 1; } free(regnames); return 0; } else{ free(regnames); return 1; } } int main() { adxl362.reset(); 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 current [3] = {0,0,0}; int8_t accel [3] = {0,0,0}; int8_t currAdd; int8_t diffAdd; float threshold = 2; float val; int knock_counter = 0; while(1) { x=adxl362.scanx_u8(); y=adxl362.scany_u8(); z=adxl362.scanz_u8(); current [0] = x; current [1] = y; current [2] = z; currAdd = abs(current[0] + current [1] + current [2]); wait_ms(10); x=adxl362.scanx_u8(); y=adxl362.scany_u8(); z=adxl362.scanz_u8(); accel[0] = x; accel[1] = y; accel[2] = z; diffAdd = abs(accel[0] + accel [1] + accel [2]); wait_ms(10); val = abs(currAdd - diffAdd); if(val > threshold){ printf("\n\r A knock has been heard ma dude\r\n"); printf("Knocks = %d\r\n" , knock_counter); knock_counter ++; led1 = 1; wait_ms(2000); led1 = 0; } // printf("x = %d y = %d z = %d\r\n",x,y,z); //wait_ms(1000); // adxl362_reg_print(0, 0); } }