Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" 00002 #include "ADXL362.h" 00003 #include <stdlib.h> 00004 00005 00006 00007 /* David Malone davmalon@indiana.edu 00008 lab 6 00009 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. 00010 00011 */ 00012 00013 // Interface pulled from ADXL362.cpp 00014 // ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) : 00015 ADXL362 adxl362(PA_0,PA_7,PA_6,PA_1); 00016 00017 DigitalOut led1(LED1);//led setup 00018 00019 int adxl362_reg_print(int start, int length); //function prototype for lab 6 functionality 00020 00021 int main() { 00022 adxl362.reset(); 00023 wait_ms(600); // we need to wait at least 500ms after ADXL362 reset 00024 adxl362.set_mode(ADXL362::MEASUREMENT); 00025 long unsigned int count = 0; 00026 int x,y,z,test; 00027 wait_ms(1000); 00028 x=adxl362.scanx(); 00029 y=adxl362.scany(); 00030 z=adxl362.scanz(); 00031 float average = (253 + 253 + 73) / 3.0; 00032 float currentReading = 0.0; 00033 int numKnocks =0; 00034 float movingAverage = average; 00035 float temp; 00036 float swap; 00037 float sum; 00038 float numbers[] = {average, average, average, average, average, average, average, average, average, average}; 00039 printf("x = %d y = %d z = %d \r\n",x,y,z); 00040 while(1) { 00041 x=adxl362.scanx_u8(); 00042 y=adxl362.scany_u8(); 00043 z=adxl362.scanz_u8(); 00044 adxl362_reg_print(0,46); //print all the registers 00045 00046 /* 00047 00048 //test = adxl362.read_reg(adxl362.DEVID_AD); //testing the device id register 00049 //printf("x = %d y = %d z = %d Test = %0x\r\n",x,y,z,test); 00050 //int i = adxl362_reg_print(0,-1); 00051 //knock reader 00052 sum = 0; 00053 for(int j = 0; j < 10; j++) { 00054 sum = sum + numbers[j]; 00055 }//gets sum of samples for moving average 00056 00057 movingAverage = sum / 10.0 ; //moving average based upon 10 most recent samplings 00058 00059 currentReading = (abs(x) + abs(y) + abs(z)) / 3.0; 00060 if(currentReading * 1.5 < movingAverage) { //regitered a knock, lets get led and delay 00061 numKnocks +=1; 00062 led1 = 1; 00063 printf("Number of knocks since reset: %d \r\n", numKnocks); 00064 wait_ms(2000); //wait 2 seconds 00065 led1 = 0; 00066 }//end if 00067 //swap moving array 00068 temp = numbers[9]; 00069 numbers[9] = currentReading; 00070 swap = numbers[8]; 00071 numbers[8] = temp; 00072 temp = numbers[7]; 00073 numbers[7] = swap; 00074 swap = numbers[6]; 00075 numbers[6] = temp; 00076 temp = numbers[5]; 00077 numbers[5] = swap; 00078 swap = numbers[4]; 00079 numbers[4] = temp; 00080 temp = numbers[3]; 00081 numbers[3] = swap; 00082 swap = numbers[2]; 00083 numbers[2] = temp; 00084 temp = numbers[1]; 00085 numbers[1] = swap; 00086 numbers[0] = temp; 00087 //this swaps the 10 array elements so that the new reading can be contained in the past 10 readings for a moving average; 00088 00089 count +=1; 00090 */ 00091 00092 wait_ms(100); 00093 //printf("x = %d y = %d z = %d \r\n",x,y,z); 00094 } 00095 }//end main 00096 00097 int adxl362_reg_print(int start, int length) { 00098 //check if start or length go beyond addr window 00099 if(start < 0x00 || start > 0x2E) { //check starting value 00100 printf("recieved invalid starting point. range is 0-46 \n\r"); 00101 return -1; 00102 } 00103 else if((start + length) > 0x2E) { //check input range 00104 printf("length too long. range is 0-46 \n\r"); 00105 return -1; 00106 } 00107 else if(length < 0) { //cheack the length 00108 printf("invalid length. Length must be positive \n\r"); 00109 return -1; 00110 } 00111 else if(adxl362.read_reg(adxl362.DEVID_AD) != 0xAD) { //check the device id register 00112 printf("Device id register has incorrect value of: %d \n\r", adxl362.read_reg(adxl362.DEVID_AD)); 00113 return -1; 00114 } 00115 else {//checks passed, output registers 00116 char *rtn = ""; 00117 for(int i = start; i < length -1; i++) { 00118 printf("%02x :", i); //print address 00119 switch(i) { 00120 case 0: 00121 rtn = "DEVID_AD"; 00122 printf("%s = %0x \n\r", rtn, adxl362.DEVID_AD); 00123 break; 00124 case 1: 00125 rtn = "DEVID_MST"; 00126 printf("%s = %0x \n\r", rtn, adxl362.DEVID_MST); 00127 break; 00128 case 2: 00129 rtn = "PARTID"; 00130 printf("%s = %0x \n\r", rtn, adxl362.PARTID); 00131 case 3: 00132 rtn = "REVID"; 00133 printf("%s = %0x \n\r", rtn, adxl362.read_reg(adxl362.REVID)); 00134 break; 00135 case 4: // no opp 00136 rtn = ""; 00137 break; 00138 case 5: //no opp 00139 break; 00140 case 6: //no opp 00141 break; 00142 case 7: //mo opp 00143 break; 00144 case 8: 00145 rtn = "XDATA"; 00146 printf("%s = %0x \n\r", rtn, adxl362.XDATA); 00147 break; 00148 case 9: 00149 rtn = "YDATA"; 00150 printf("%s = %0x \n\r", rtn, adxl362.YDATA); 00151 break; 00152 case 10: 00153 rtn = "ZDATA"; 00154 printf("%s = %0x \n\r", rtn, adxl362.ZDATA); 00155 break; 00156 case 11: 00157 rtn = "STATUS"; 00158 printf("%s = %0x \n\r", rtn, adxl362.STATUS); 00159 break; 00160 case 12: 00161 rtn = "FIFO_ENTRIES_L"; 00162 printf("%s = %0x \n\r", rtn, adxl362.FIFO_ENTRIES_L); 00163 break; 00164 case 13: 00165 rtn = "FIFO_ENTRIES_H"; 00166 printf("%s = %0x \n\r", rtn, adxl362.FIFO_ENTRIES_H); 00167 break; 00168 case 14: 00169 rtn = "XDATA_L"; 00170 printf("%s = %0x \n\r", rtn, adxl362.XDATA_L); 00171 break; 00172 case 15: 00173 rtn = "XDATA_H"; 00174 printf("%s = %0x \n\r", rtn, adxl362.XDATA_H); 00175 break; 00176 case 16: 00177 rtn = "YDATA_L"; 00178 printf("%s = %0x \n\r", rtn, adxl362.YDATA_L); 00179 break; 00180 case 17: 00181 rtn = "YDATA_H"; 00182 printf("%s = %0x \n\r", rtn, adxl362.YDATA_H); 00183 break; 00184 case 18: 00185 rtn = "ZDATA_L"; 00186 printf("%s = %0x \n\r", rtn, adxl362.ZDATA_L); 00187 break; 00188 case 19: 00189 rtn = "ZDATA_H"; 00190 printf("%s = %0x \n\r", rtn, adxl362.ZDATA_H); 00191 break; 00192 case 20: 00193 rtn = "TEMP_L"; 00194 printf("%s = %0x \n\r", rtn, adxl362.TEMP_L); 00195 break; 00196 case 21: 00197 rtn = "TEMP_H"; 00198 printf("%s = %0x \n\r", rtn, adxl362.TEMP_H); 00199 break; 00200 case 31: 00201 rtn = "SOFT_RESET"; 00202 printf("%s = %0x \n\r", rtn, adxl362.SOFT_RESET); 00203 break; 00204 case 32: 00205 rtn = "THRESH_ACT_L"; 00206 printf("%s = %0x \n\r", rtn, adxl362.THRESH_ACT_L); 00207 break; 00208 case 33: 00209 rtn = "THRESH_ACT_H"; 00210 printf("%s = %0x \n\r", rtn, adxl362.THRESH_ACT_H); 00211 break; 00212 case 34: 00213 rtn = "TIME_ACT"; 00214 printf("%s = %0x \n\r", rtn, adxl362.TIME_ACT); 00215 break; 00216 case 35: 00217 rtn = "THRESH_INACT_L"; 00218 printf("%s = %0x \n\r", rtn, adxl362.THRESH_INACT_L); 00219 break; 00220 case 36: 00221 rtn = "THRESH_INACT_H"; 00222 printf("%s = %0x \n\r", rtn, adxl362.THRESH_INACT_H); 00223 break; 00224 case 37: 00225 rtn = "TIME_INACT_L"; 00226 printf("%s = %0x \n\r", rtn, adxl362.TIME_INACT_L); 00227 break; 00228 case 38: 00229 rtn = "TIME_INACT_H"; 00230 printf("%s = %0x \n\r", rtn, adxl362.TIME_INACT_H); 00231 break; 00232 case 39: 00233 rtn = "ACT_INACT_CTL"; 00234 printf("%s = %0x \n\r", rtn, adxl362.ACT_INACT_CTL); 00235 break; 00236 case 40: 00237 rtn = "FIFO_CONTROL"; 00238 printf("%s = %0x \n\r", rtn, adxl362.FIFO_CONTROL); 00239 break; 00240 case 41: 00241 rtn = "FIFO_SAMPLES"; 00242 printf("%s = %0x \n\r", rtn, adxl362.FIFO_SAMPLES); 00243 break; 00244 case 42: 00245 rtn = "INTMAP1"; 00246 printf("%s = %0x \n\r", rtn, adxl362.INTMAP1); 00247 break; 00248 case 43: 00249 rtn = "INTMAP2"; 00250 printf("%s = %0x \n\r", rtn, adxl362.INTMAP2); 00251 break; 00252 case 44: 00253 rtn = "FILTER_CTL"; 00254 printf("%s = %0x \n\r", rtn, adxl362.FILTER_CTL); 00255 break; 00256 case 45: 00257 rtn = "POWER_CTL"; 00258 printf("%s = %0x \n\r", rtn, adxl362.POWER_CTL); 00259 break; 00260 case 46: 00261 rtn = "SELF_TEST"; 00262 printf("%s = %0x \n\r", rtn, adxl362.SELF_TEST); 00263 break; 00264 default: 00265 rtn = ""; 00266 break; 00267 00268 }//end switch 00269 }//end loop 00270 return 1; //sucess 00271 }// 00272 return 0;//undetected failure 00273 00274 }//end reg_print function 00275 00276 00277 /* getRegName() 00278 paramater int :: address of register 00279 return String :: name of register 00280 register list 00281 DEVID_AD = 0x00, 00282 DEVID_MST = 0x01, 00283 PARTID = 0x02, 00284 REVID = 0x03, 00285 XDATA = 0x08, 00286 YDATA = 0x09, 00287 ZDATA = 0x0A, 00288 STATUS = 0x0B, 00289 FIFO_ENTRIES_L = 0x0C, 00290 FIFO_ENTRIES_H = 0x0D, 00291 XDATA_L = 0x0E, 00292 XDATA_H = 0x0F, 00293 YDATA_L = 0x10, 00294 YDATA_H = 0x11, 00295 ZDATA_L = 0x12, 00296 ZDATA_H = 0x13, 00297 TEMP_L = 0x14, 00298 TEMP_H = 0x15, 00299 // Reserved = 0x16; 00300 // Reserved = 0x17; 00301 SOFT_RESET = 0x1F, 00302 THRESH_ACT_L = 0x20, 00303 THRESH_ACT_H = 0x21, 00304 TIME_ACT = 0x22, 00305 THRESH_INACT_L = 0x23, 00306 THRESH_INACT_H = 0x24, 00307 TIME_INACT_L = 0x25, 00308 TIME_INACT_H = 0x26, 00309 ACT_INACT_CTL = 0x27, 00310 FIFO_CONTROL = 0x28, 00311 FIFO_SAMPLES = 0x29, 00312 INTMAP1 = 0x2A, 00313 INTMAP2 = 0x2B, 00314 FILTER_CTL = 0x2C, 00315 POWER_CTL = 0x2D, 00316 SELF_TEST = 0x2E, 00317 */ 00318 00319 00320 00321 /* End of file */
Generated on Thu Jul 21 2022 09:29:32 by
1.7.2