CPS-Lab* / Mbed 2 deprecated labseven

Dependencies:   ADXL362 Lab7 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 "MPL3115A2.h"
00004 #include <stdio.h>
00005 #include <stdlib.h>
00006 
00007 Serial pc(SERIAL_TX, SERIAL_RX);
00008 DigitalOut myled(LED1);
00009 ADXL362 adxl362(PA_0,PA_7,PA_6,PA_1);
00010 MPL3115A2 pressure_sensor(PB_7,PB_6,0x60);
00011 InterruptIn event(PA_4);
00012 
00013 char *arr[] = {
00014     "MPL_STATUS","MPL_OUT_P_MSB", "MPL_OUT_P_CSB","MPL_OUT_P_LSB","MPL_OUT_P_LSB",
00015     "MPL_OUT_T_LSB","MPL_DR_STATUS","MPL_OUT_P_DELTA_MSB","MPL_OUT_P_DELTA_MSB",
00016     "MPL_OUT_P_DELTA_LSB","MPL_OUT_T_DELTA_MSB","MPL_OUT_T_DELTA_LSB",
00017     "MPL_WHO_AM_I","MPL_F_STATUS","MPL_F_DATA","MPL_F_SETUP","MPL_TIME_DLY",
00018     "MPL_SYSMOD","MPL_INT_SOURCE","MPL_PT_DATA_CFG","MPL_BAR_IN_MSB",
00019     "MPL_BAR_IN_LSB","MPL_P_TGT_MSB","MPL_P_TGT_LSB","MPL_T_TGT","MPL_P_WND_MSB",
00020     "MPL_P_WND_LSB","MPL_T_WND","MPL_P_MIN_MSB","MPL_P_MIN_CSB","MPL_P_MIN_LSB",
00021     "MPL_T_MIN_MSB", "MPL_T_MIN_LSB", "MPL_P_MAX_MSB", "MPL_P_MAX_CSB",
00022     "MPL_P_MAX_LSB","MPL_T_MAX_MSB","MPL_T_MAX_LSB","MPL_CTRL_REG1",
00023     "MPL_CTRL_REG2","MPL_CTRL_REG3","MPL_CTRL_REG4","MPL_CTRL_REG5",
00024     "MPL_OFF_P","MPL_OFF_T","MPL_OFF_H" 
00025     };
00026 
00027 
00028 int adxl362_reg_print(int start, int length) {
00029     int rvalue = 0;
00030     rvalue = adxl362.read_reg(ADXL362::DEVID_AD);
00031     if(rvalue!=0xAD){
00032         printf("value is %X\n\r",rvalue);
00033         printf("error\n\r");
00034         return -1;
00035         }
00036     else if(!(0 <= start && start < 46)){
00037         printf("error\n\r");
00038         return -1;
00039         }
00040     else if (!(length >= 0)){
00041         printf("error\n\r");
00042         return -1;
00043         }
00044     int i = 0;
00045     
00046     if (length!=0){
00047         for (i = start; i < start+length; i++){
00048             switch(i){
00049                 case 0 : 
00050                     rvalue = adxl362.read_reg(ADXL362::DEVID_AD);
00051                     printf("0x00: DEVID_AD = %X \n\r", rvalue);
00052                     break;
00053                 case 1 :
00054                     rvalue = adxl362.read_reg(ADXL362::DEVID_MST);
00055                     printf("0x01: DEVID_MST = %X \n\r", rvalue);
00056                     break;
00057                 case 2 :
00058                     rvalue = adxl362.read_reg(ADXL362::PARTID);
00059                     printf("0x02: PARTID = %X \n\r", rvalue);
00060                     break;
00061                 case 3 :
00062                     rvalue = adxl362.read_reg(ADXL362::REVID);
00063                     printf("0x03: REVID = %X \n\r", rvalue);
00064                 case 4 :
00065                     rvalue = adxl362.read_reg(ADXL362::XDATA);
00066                     printf("0x08: XDATA = %X \n\r", rvalue);
00067                     break;
00068                 case 5 :
00069                     rvalue = adxl362.read_reg(ADXL362::YDATA);
00070                     printf("0x09: YDATA = %X \n\r", rvalue);
00071                     break;
00072                 case 6 :
00073                     rvalue = adxl362.read_reg(ADXL362::ZDATA);
00074                     printf("0x0A: ZDATA = %X \n\r", rvalue);
00075                     break;
00076                 case 7 :
00077                     rvalue = adxl362.read_reg(ADXL362::STATUS);
00078                     printf("0x0B: STATUS = %X \n\r", rvalue);
00079                     break;
00080                 case 8 :
00081                     rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_L);
00082                     printf("0x0C: FIFO_ENTRIES_L = %X \n\r", rvalue);
00083                     break;
00084                 case 9 :
00085                     rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_H);
00086                     printf("0x0D: FIFO_ENTRIES_H = %X \n\r", rvalue);
00087                     break;
00088                 case 10 :
00089                     rvalue = adxl362.read_reg(ADXL362::XDATA_L);
00090                     printf("0x0E: XDATA_L = %X \n\r", rvalue);
00091                     break;
00092                 case 11 :
00093                     rvalue = adxl362.read_reg(ADXL362::XDATA_H);
00094                     printf("0x0F: XDATA_H = %X \n\r", rvalue);
00095                     break;
00096                 case 12 :
00097                     rvalue = adxl362.read_reg(ADXL362::YDATA_L);
00098                     printf("0x10: YDATA_L = %X \n\r", rvalue);
00099                     break;
00100                 case 13 :
00101                     rvalue = adxl362.read_reg(ADXL362::YDATA_H);
00102                     printf("0x11: YDATA_H = %X \n\r", rvalue);
00103                     break;
00104                 case 14 :
00105                     rvalue = adxl362.read_reg(ADXL362::ZDATA_L);
00106                     printf("0x12: ZDATA_L = %X \n\r", rvalue);
00107                     break;
00108                 case 15 :
00109                     rvalue = adxl362.read_reg(ADXL362::ZDATA_H);
00110                     printf("0x13: ZDATA_H = %X \n\r", rvalue);
00111                     break;
00112                 case 16 :
00113                     rvalue = adxl362.read_reg(ADXL362::TEMP_L);
00114                     printf("0x14: TEMP_L = %X \n\r", rvalue);
00115                     break;
00116                 case 17 :
00117                     rvalue = adxl362.read_reg(ADXL362::TEMP_H);
00118                     printf("0x15: TEMP_H = %X \n\r", rvalue);
00119                     break;
00120                 case 18 :
00121                     rvalue = adxl362.read_reg(ADXL362::SOFT_RESET);
00122                     printf("0x1F: SOFT_RESET = %X \n\r", rvalue);
00123                     break;
00124                 case 19 :
00125                     rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_L);
00126                     printf("0x20: THRESH_ACT_L = %X \n\r", rvalue);
00127                     break;
00128                 case 20 :
00129                     rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_H);
00130                     printf("0x21: THRESH_ACT_H = %X \n\r", rvalue);
00131                     break;
00132                 case 21 :
00133                     rvalue = adxl362.read_reg(ADXL362::TIME_ACT);
00134                     printf("0x22: TIME_ACT = %X \n\r", rvalue);
00135                     break;
00136                 case 22 :
00137                     rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_L);
00138                     printf("0x23: THRESH_INACT_L = %X \n\r", rvalue);
00139                     break;
00140                 case 23 :
00141                     rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_H);
00142                     printf("0x24: THRESH_INACT_H = %X \n\r", rvalue);
00143                     break;
00144                 case 24 :
00145                     rvalue = adxl362.read_reg(ADXL362::TIME_INACT_L);
00146                     printf("0x25: TIME_INACT_L = %X \n\r", rvalue);
00147                     break;
00148                 case 25 :
00149                     rvalue = adxl362.read_reg(ADXL362::TIME_INACT_H);
00150                     printf("0x26: TIME_INACT_H = %X \n\r", rvalue);
00151                     break;
00152                 case 26 :
00153                     rvalue = adxl362.read_reg(ADXL362::ACT_INACT_CTL);
00154                     printf("0x27: ACT_INACT_CTL = %X \n\r", rvalue);
00155                     break;
00156                 case 27 :
00157                     rvalue = adxl362.read_reg(ADXL362::FIFO_CONTROL);
00158                     printf("0x28: FIFO_CONTROL = %X \n\r", rvalue);
00159                     break;
00160                 case 28 :
00161                     rvalue = adxl362.read_reg(ADXL362::FIFO_SAMPLES);
00162                     printf("0x29: FIFO_SAMPLES = %X \n\r", rvalue);
00163                     break;
00164                 case 29 :
00165                     rvalue = adxl362.read_reg(ADXL362::INTMAP1);
00166                     printf("0x2A: INTMAP1 = %X \n\r", rvalue);
00167                     break;
00168                 case 30 :
00169                     rvalue = adxl362.read_reg(ADXL362::INTMAP2);
00170                     printf("0x2B: INTMAP2 = %X \n\r", rvalue);
00171                     break;
00172                 case 31 :
00173                     rvalue = adxl362.read_reg(ADXL362::FILTER_CTL);
00174                     printf("0x2C: FILTER_CTL = %X \n\r", rvalue);
00175                     break;
00176                 case 32 :
00177                     rvalue = adxl362.read_reg(ADXL362::POWER_CTL);
00178                     printf("0x2D: POWER_CTL = %X \n\r", rvalue);
00179                     break;
00180                 case 33 :
00181                     rvalue = adxl362.read_reg(ADXL362::SELF_TEST);
00182                     printf("0x2E: SELF_TEST = %X \n\r", rvalue);
00183                     break;
00184                 default :
00185                     printf("ERROR:  NO REGISTER HERE\n\r");
00186                     break;
00187                    }        
00188             }
00189         }
00190     else {
00191         for (i = 0; i < 34; i++){
00192             switch(i){
00193                 case 0 : 
00194                     rvalue = adxl362.read_reg(ADXL362::DEVID_AD);
00195                     printf("0x00: DEVID_AD = %X \n\r", rvalue);
00196                     break;
00197                 case 1 :
00198                     rvalue = adxl362.read_reg(ADXL362::DEVID_MST);
00199                     printf("0x01: DEVID_MST = %X \n\r", rvalue);
00200                     break;
00201                 case 2 :
00202                     rvalue = adxl362.read_reg(ADXL362::PARTID);
00203                     printf("0x02: PARTID = %X \n\r", rvalue);
00204                     break;
00205                 case 3 :
00206                     rvalue = adxl362.read_reg(ADXL362::REVID);
00207                     printf("0x03: REVID = %X \n\r", rvalue);
00208                     break;
00209                 case 4 :
00210                     rvalue = adxl362.read_reg(ADXL362::XDATA);
00211                     printf("0x08: XDATA = %X \n\r", rvalue);
00212                     break;
00213                 case 5 :
00214                     rvalue = adxl362.read_reg(ADXL362::YDATA);
00215                     printf("0x09: YDATA = %X \n\r", rvalue);
00216                     break;
00217                 case 6 :
00218                     rvalue = adxl362.read_reg(ADXL362::ZDATA);
00219                     printf("0x0A: ZDATA = %X \n\r", rvalue);
00220                     break;
00221                 case 7 :
00222                     rvalue = adxl362.read_reg(ADXL362::STATUS);
00223                     printf("0x0B: STATUS = %X \n\r", rvalue);
00224                     break;
00225                 case 8 :
00226                     rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_L);
00227                     printf("0x0C: FIFO_ENTRIES_L = %X \n\r", rvalue);
00228                     break;
00229                 case 9 :
00230                     rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_H);
00231                     printf("0x0D: FIFO_ENTRIES_H = %X \n\r", rvalue);
00232                     break;
00233                 case 10 :
00234                     rvalue = adxl362.read_reg(ADXL362::XDATA_L);
00235                     printf("0x0E: XDATA_L = %X \n\r", rvalue);
00236                     break;
00237                 case 11 :
00238                     rvalue = adxl362.read_reg(ADXL362::XDATA_H);
00239                     printf("0x0F: XDATA_H = %X \n\r", rvalue);
00240                     break;
00241                 case 12 :
00242                     rvalue = adxl362.read_reg(ADXL362::YDATA_L);
00243                     printf("0x10: YDATA_L = %X \n\r", rvalue);
00244                     break;
00245                 case 13 :
00246                     rvalue = adxl362.read_reg(ADXL362::YDATA_H);
00247                     printf("0x11: YDATA_H = %X \n\r", rvalue);
00248                     break;
00249                 case 14 :
00250                     rvalue = adxl362.read_reg(ADXL362::ZDATA_L);
00251                     printf("0x12: ZDATA_L = %X \n\r", rvalue);
00252                     break;
00253                 case 15 :
00254                     rvalue = adxl362.read_reg(ADXL362::ZDATA_H);
00255                     printf("0x13: ZDATA_H = %X \n\r", rvalue);
00256                     break;
00257                 case 16 :
00258                     rvalue = adxl362.read_reg(ADXL362::TEMP_L);
00259                     printf("0x14: TEMP_L = %X \n\r", rvalue);
00260                     break;
00261                 case 17 :
00262                     rvalue = adxl362.read_reg(ADXL362::TEMP_H);
00263                     printf("0x15: TEMP_H = %X \n\r", rvalue);
00264                     break;
00265                 case 18 :
00266                     rvalue = adxl362.read_reg(ADXL362::SOFT_RESET);
00267                     printf("0x1F: SOFT_RESET = %X \n\r", rvalue);
00268                     break;
00269                 case 19 :
00270                     rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_L);
00271                     printf("0x20: THRESH_ACT_L = %X \n\r", rvalue);
00272                     break;
00273                 case 20 :
00274                     rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_H);
00275                     printf("0x21: THRESH_ACT_H = %X \n\r", rvalue);
00276                     break;
00277                 case 21 :
00278                     rvalue = adxl362.read_reg(ADXL362::TIME_ACT);
00279                     printf("0x22: TIME_ACT = %X \n\r", rvalue);
00280                     break;
00281                 case 22 :
00282                     rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_L);
00283                     printf("0x23: THRESH_INACT_L = %X \n\r", rvalue);
00284                     break;
00285                 case 23 :
00286                     rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_H);
00287                     printf("0x24: THRESH_INACT_H = %X \n\r", rvalue);
00288                     break;
00289                 case 24 :
00290                     rvalue = adxl362.read_reg(ADXL362::TIME_INACT_L);
00291                     printf("0x25: TIME_INACT_L = %X \n\r", rvalue);
00292                     break;
00293                 case 25 :
00294                     rvalue = adxl362.read_reg(ADXL362::TIME_INACT_H);
00295                     printf("0x26: TIME_INACT_H = %X \n\r", rvalue);
00296                     break;
00297                 case 26 :
00298                     rvalue = adxl362.read_reg(ADXL362::ACT_INACT_CTL);
00299                     printf("0x27: ACT_INACT_CTL = %X \n\r", rvalue);
00300                     break;
00301                 case 27 :
00302                     rvalue = adxl362.read_reg(ADXL362::FIFO_CONTROL);
00303                     printf("0x28: FIFO_CONTROL = %X \n\r", rvalue);
00304                     break;
00305                 case 28 :
00306                     rvalue = adxl362.read_reg(ADXL362::FIFO_SAMPLES);
00307                     printf("0x29: FIFO_SAMPLES = %X \n\r", rvalue);
00308                     break;
00309                 case 29 :
00310                     rvalue = adxl362.read_reg(ADXL362::INTMAP1);
00311                     printf("0x2A: INTMAP1 = %X \n\r", rvalue);
00312                     break;
00313                 case 30 :
00314                     rvalue = adxl362.read_reg(ADXL362::INTMAP2);
00315                     printf("0x2B: INTMAP2 = %X \n\r", rvalue);
00316                     break;
00317                 case 31 :
00318                     rvalue = adxl362.read_reg(ADXL362::FILTER_CTL);
00319                     printf("0x2C: FILTER_CTL = %X \n\r", rvalue);
00320                     break;
00321                 case 32 :
00322                     rvalue = adxl362.read_reg(ADXL362::POWER_CTL);
00323                     printf("0x2D: POWER_CTL = %X \n\r", rvalue);
00324                     break;
00325                 case 33 :
00326                     rvalue = adxl362.read_reg(ADXL362::SELF_TEST);
00327                     printf("0x2E: SELF_TEST = %X \n\r", rvalue);
00328                     break;
00329                 default :
00330                     printf("ERROR:  NO REGISTER HERE\n\r");
00331                     break;
00332                    }        
00333             }     
00334         }
00335     
00336     return 0;
00337     }
00338     
00339 int blink() {
00340         myled = 1; // LED is ON
00341         wait(2); // 2 sec
00342         myled = 0; // LED is OFF
00343         return 0;
00344 }
00345 
00346 int mpl3115_reg_print(int start, int length){
00347     
00348     uint8_t id;
00349     
00350     if ((start < 0) || (start > 45)) {
00351         pc.printf("break 1 \n\r");
00352         return -1;
00353         }
00354     if (length < 0) {
00355         pc.printf("break 2 \n\r");
00356         return -1;
00357         }
00358     id = pressure_sensor.getID();
00359     if (id!=0xC4) {
00360         pc.printf("break 3 \n\r");
00361         return -1;
00362         }
00363     
00364     uint8_t a[45];
00365             
00366     pressure_sensor.readRegs(start, a, length);
00367     
00368     int i = 0;
00369     for (i=0;i<length;i++){
00370         pc.printf("0x%X: %s is 0x%X \n\r",i, arr[i], a[i]);
00371         }
00372     return 0;
00373 
00374 }
00375 
00376 int printA(double* ar1, double* ar2, int start, int end){
00377     int i = 0;
00378     for (i = start; i < end; i++){
00379         pc.printf("value at %d : temp: %f pressure: %f \n\r",i,ar1[i], ar2[i]);
00380         }
00381     return 0;
00382 }
00383 
00384 int main() {
00385     int arraySize = 250; //approximately the time it takes to ride one elevator floors 1-6
00386     double altitudeReading[arraySize];
00387     double tempReading[arraySize];
00388     int i = 0, j = 0;
00389 
00390     j = mpl3115_reg_print(0, 45); 
00391 
00392     for (i = 0; i < arraySize; i++) { 
00393         altitudeReading[i] = -1;
00394     }
00395     for(j = 0; j < arraySize; j++) {
00396         tempReading[j] = -1;
00397         }
00398     i = 0;
00399     pc.printf("reading an altitude at this point at 10hz\r\n");
00400     pc.printf("Enter p to print, enter s to stop: ");
00401     while (1) {
00402         wait_us(100);
00403         altitudeReading[i] = pressure_sensor.getAltitude();
00404         i++;
00405         tempReading[j] = pressure_sensor.getTemperature();
00406         j++;
00407         if (i > arraySize) {
00408             i = 0;
00409         }
00410         if( j > arraySize) {
00411             j = 0;
00412         }
00413         if (pc.readable()) {
00414             char c = pc.getc();
00415             pc.printf("we read a char, it was %c\r\n",c);
00416             if (c == 'p') { //press p to show what is currently in the array
00417                 pc.printf("read a p\r\n");
00418                 int h = 0;
00419                 for (h = 0; h < arraySize; h++) { 
00420                     pc.printf("temperature = %f, altitude = %f\r\n", tempReading[h], altitudeReading[h]);                
00421                 }
00422             }
00423             if( c == 's') { //press s to get it to stop reading
00424                 break;
00425                 }
00426         }
00427 
00428     }
00429     
00430    
00431 
00432     
00433     
00434     
00435     
00436     
00437      /*     Lab 6 work
00438     
00439     wait_ms(600); // we need to wait at least 500ms after ADXL362 reset
00440     adxl362.set_mode(ADXL362::MEASUREMENT);
00441     int8_t x,y,z; 
00442     int8_t nx, ny, nz;
00443     adxl362_reg_print(0, 0); // call register printing here
00444     adxl362_reg_print(0, 5);
00445     adxl362_reg_print(4, 6);
00446     //while (1) {adxl362_reg_print(0, 0);} to print forever
00447     
00448     int blink_c = 0;
00449     x=adxl362.scanx_u8();
00450     y=adxl362.scany_u8();
00451     z=adxl362.scanz_u8();
00452 
00453     while(1) { //detects knocks
00454         x=adxl362.scanx_u8();
00455         y=adxl362.scany_u8();
00456         z=adxl362.scanz_u8();
00457         wait_us(100);
00458         nx=adxl362.scanx_u8();
00459         ny=adxl362.scany_u8();
00460         nz=adxl362.scanz_u8();
00461         if ((abs(x-nx)>=4) || (abs(y-ny)>=4) || (abs(z-nz)>=4)){ 
00462             blink_c += 1;
00463             printf("number of knocks detected: %d\n\r",blink_c);
00464             blink();
00465         }
00466     } */
00467     
00468 }