lab 6
Revision 0:3b7e393206f1, committed 2018-03-02
- Comitter:
- davmalon
- Date:
- Fri Mar 02 16:37:23 2018 +0000
- Child:
- 1:32862341b795
- Commit message:
- finished lab6
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ADXL362.lib Fri Mar 02 16:37:23 2018 +0000 @@ -0,0 +1,1 @@ +http://os.mbed.com/teams/AnalogDevices/code/ADXL362/#ae171c032dc0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Fri Mar 02 16:37:23 2018 +0000
@@ -0,0 +1,321 @@
+#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 */
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Mar 02 16:37:23 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/7130f322cb7e \ No newline at end of file