CPS-Lab / Mbed 2 deprecated Lab6

Dependencies:   ADXL362 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 */