lab 6
main.cpp
- Committer:
- davmalon
- Date:
- 2018-03-02
- Revision:
- 1:32862341b795
- Parent:
- 0:3b7e393206f1
File content as of revision 1:32862341b795:
#include "mbed.h"
#include "ADXL362.h"
#include <stdlib.h>
/* David Malone davmalon@indiana.edu
lab 6
please note that when testing my values, the values for x and y were averaginf round 253-254 and would rop upon being bumped or moved.
*/
// 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);
DigitalOut led1(LED1);//led setup
int adxl362_reg_print(int start, int length); //function prototype for lab 6 functionality
int main() {
adxl362.reset();
wait_ms(600); // we need to wait at least 500ms after ADXL362 reset
adxl362.set_mode(ADXL362::MEASUREMENT);
long unsigned int count = 0;
int x,y,z,test;
wait_ms(1000);
x=adxl362.scanx();
y=adxl362.scany();
z=adxl362.scanz();
float average = (253 + 253 + 73) / 3.0;
float currentReading = 0.0;
int numKnocks =0;
float movingAverage = average;
float temp;
float swap;
float sum;
float numbers[] = {average, average, average, average, average, average, average, average, average, average};
printf("x = %d y = %d z = %d \r\n",x,y,z);
while(1) {
x=adxl362.scanx_u8();
y=adxl362.scany_u8();
z=adxl362.scanz_u8();
adxl362_reg_print(0,46); //print all the registers
/*
//test = adxl362.read_reg(adxl362.DEVID_AD); //testing the device id register
//printf("x = %d y = %d z = %d Test = %0x\r\n",x,y,z,test);
//int i = adxl362_reg_print(0,-1);
//knock reader
sum = 0;
for(int j = 0; j < 10; j++) {
sum = sum + numbers[j];
}//gets sum of samples for moving average
movingAverage = sum / 10.0 ; //moving average based upon 10 most recent samplings
currentReading = (abs(x) + abs(y) + abs(z)) / 3.0;
if(currentReading * 1.5 < movingAverage) { //regitered a knock, lets get led and delay
numKnocks +=1;
led1 = 1;
printf("Number of knocks since reset: %d \r\n", numKnocks);
wait_ms(2000); //wait 2 seconds
led1 = 0;
}//end if
//swap moving array
temp = numbers[9];
numbers[9] = currentReading;
swap = numbers[8];
numbers[8] = temp;
temp = numbers[7];
numbers[7] = swap;
swap = numbers[6];
numbers[6] = temp;
temp = numbers[5];
numbers[5] = swap;
swap = numbers[4];
numbers[4] = temp;
temp = numbers[3];
numbers[3] = swap;
swap = numbers[2];
numbers[2] = temp;
temp = numbers[1];
numbers[1] = swap;
numbers[0] = temp;
//this swaps the 10 array elements so that the new reading can be contained in the past 10 readings for a moving average;
count +=1;
*/
wait_ms(100);
//printf("x = %d y = %d z = %d \r\n",x,y,z);
}
}//end main
int adxl362_reg_print(int start, int length) {
//check if start or length go beyond addr window
if(start < 0x00 || start > 0x2E) { //check starting value
printf("recieved invalid starting point. range is 0-46 \n\r");
return -1;
}
else if((start + length) > 0x2E) { //check input range
printf("length too long. range is 0-46 \n\r");
return -1;
}
else if(length < 0) { //cheack the length
printf("invalid length. Length must be positive \n\r");
return -1;
}
else if(adxl362.read_reg(adxl362.DEVID_AD) != 0xAD) { //check the device id register
printf("Device id register has incorrect value of: %d \n\r", adxl362.read_reg(adxl362.DEVID_AD));
return -1;
}
else {//checks passed, output registers
char *rtn = "";
for(int i = start; i < length -1; i++) {
printf("%02x :", i); //print address
switch(i) {
case 0:
rtn = "DEVID_AD";
printf("%s = %0x \n\r", rtn, adxl362.DEVID_AD);
break;
case 1:
rtn = "DEVID_MST";
printf("%s = %0x \n\r", rtn, adxl362.DEVID_MST);
break;
case 2:
rtn = "PARTID";
printf("%s = %0x \n\r", rtn, adxl362.PARTID);
case 3:
rtn = "REVID";
printf("%s = %0x \n\r", rtn, adxl362.read_reg(adxl362.REVID));
break;
case 4: // no opp
rtn = "";
break;
case 5: //no opp
break;
case 6: //no opp
break;
case 7: //mo opp
break;
case 8:
rtn = "XDATA";
printf("%s = %0x \n\r", rtn, adxl362.XDATA);
break;
case 9:
rtn = "YDATA";
printf("%s = %0x \n\r", rtn, adxl362.YDATA);
break;
case 10:
rtn = "ZDATA";
printf("%s = %0x \n\r", rtn, adxl362.ZDATA);
break;
case 11:
rtn = "STATUS";
printf("%s = %0x \n\r", rtn, adxl362.STATUS);
break;
case 12:
rtn = "FIFO_ENTRIES_L";
printf("%s = %0x \n\r", rtn, adxl362.FIFO_ENTRIES_L);
break;
case 13:
rtn = "FIFO_ENTRIES_H";
printf("%s = %0x \n\r", rtn, adxl362.FIFO_ENTRIES_H);
break;
case 14:
rtn = "XDATA_L";
printf("%s = %0x \n\r", rtn, adxl362.XDATA_L);
break;
case 15:
rtn = "XDATA_H";
printf("%s = %0x \n\r", rtn, adxl362.XDATA_H);
break;
case 16:
rtn = "YDATA_L";
printf("%s = %0x \n\r", rtn, adxl362.YDATA_L);
break;
case 17:
rtn = "YDATA_H";
printf("%s = %0x \n\r", rtn, adxl362.YDATA_H);
break;
case 18:
rtn = "ZDATA_L";
printf("%s = %0x \n\r", rtn, adxl362.ZDATA_L);
break;
case 19:
rtn = "ZDATA_H";
printf("%s = %0x \n\r", rtn, adxl362.ZDATA_H);
break;
case 20:
rtn = "TEMP_L";
printf("%s = %0x \n\r", rtn, adxl362.TEMP_L);
break;
case 21:
rtn = "TEMP_H";
printf("%s = %0x \n\r", rtn, adxl362.TEMP_H);
break;
case 31:
rtn = "SOFT_RESET";
printf("%s = %0x \n\r", rtn, adxl362.SOFT_RESET);
break;
case 32:
rtn = "THRESH_ACT_L";
printf("%s = %0x \n\r", rtn, adxl362.THRESH_ACT_L);
break;
case 33:
rtn = "THRESH_ACT_H";
printf("%s = %0x \n\r", rtn, adxl362.THRESH_ACT_H);
break;
case 34:
rtn = "TIME_ACT";
printf("%s = %0x \n\r", rtn, adxl362.TIME_ACT);
break;
case 35:
rtn = "THRESH_INACT_L";
printf("%s = %0x \n\r", rtn, adxl362.THRESH_INACT_L);
break;
case 36:
rtn = "THRESH_INACT_H";
printf("%s = %0x \n\r", rtn, adxl362.THRESH_INACT_H);
break;
case 37:
rtn = "TIME_INACT_L";
printf("%s = %0x \n\r", rtn, adxl362.TIME_INACT_L);
break;
case 38:
rtn = "TIME_INACT_H";
printf("%s = %0x \n\r", rtn, adxl362.TIME_INACT_H);
break;
case 39:
rtn = "ACT_INACT_CTL";
printf("%s = %0x \n\r", rtn, adxl362.ACT_INACT_CTL);
break;
case 40:
rtn = "FIFO_CONTROL";
printf("%s = %0x \n\r", rtn, adxl362.FIFO_CONTROL);
break;
case 41:
rtn = "FIFO_SAMPLES";
printf("%s = %0x \n\r", rtn, adxl362.FIFO_SAMPLES);
break;
case 42:
rtn = "INTMAP1";
printf("%s = %0x \n\r", rtn, adxl362.INTMAP1);
break;
case 43:
rtn = "INTMAP2";
printf("%s = %0x \n\r", rtn, adxl362.INTMAP2);
break;
case 44:
rtn = "FILTER_CTL";
printf("%s = %0x \n\r", rtn, adxl362.FILTER_CTL);
break;
case 45:
rtn = "POWER_CTL";
printf("%s = %0x \n\r", rtn, adxl362.POWER_CTL);
break;
case 46:
rtn = "SELF_TEST";
printf("%s = %0x \n\r", rtn, adxl362.SELF_TEST);
break;
default:
rtn = "";
break;
}//end switch
}//end loop
return 1; //sucess
}//
return 0;//undetected failure
}//end reg_print function
/* getRegName()
paramater int :: address of register
return String :: name of register
register list
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,
*/
/* End of file */