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);
}
}