Laboratory 6
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include "ADXL362.h" 00003 #include <string> 00004 #include <stdlib.h> 00005 00006 // Interface pulled from ADXL362.cpp 00007 // ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) : 00008 ADXL362 ADXL362(PA_0,PA_7,PA_6,PA_1); 00009 Serial pc(USBTX, USBRX); 00010 DigitalOut myled(LED3); 00011 00012 int ADXL362_reg_print(int start, int length); 00013 void ADXL362_knock_detect(); 00014 00015 int main() 00016 { 00017 ADXL362.reset(); 00018 wait_ms(600); // we need to wait at least 500ms after ADXL362 reset 00019 ADXL362.set_mode(ADXL362::MEASUREMENT); 00020 //ADXL362_knock_detect(); 00021 ADXL362_reg_print(0, 0); 00022 } 00023 00024 void ADXL362_knock_detect() 00025 { 00026 int8_t x1,y1,z1,x2,y2,z2,x,y,z; 00027 int i = 0; 00028 while(1) 00029 { 00030 00031 while(1) 00032 { 00033 x1=ADXL362.scanx_u8(); 00034 y1=ADXL362.scany_u8(); 00035 z1=ADXL362.scanz_u8(); 00036 wait_ms(10); 00037 x2=ADXL362.scanx_u8(); 00038 y2=ADXL362.scany_u8(); 00039 z2=ADXL362.scanz_u8(); 00040 00041 x=abs(x1 - x2); 00042 y=abs(y1 - y2); 00043 z=abs(z1 - z2); 00044 00045 if (x>7 || y>7 || z>20) 00046 break; 00047 00048 //printf("x = %d y = %d z = %d\r\n",x,y,z); 00049 //pc.printf("x = %d, y = %d, z = %d\r\n", x1, y1, z1); 00050 wait_ms(10); 00051 } 00052 00053 myled = 1; 00054 wait(2); 00055 myled = 0; 00056 i++; 00057 pc.printf("%d\r\n", i); 00058 00059 } 00060 } 00061 00062 int ADXL362_reg_print(int start, int length) 00063 { 00064 uint8_t i; 00065 std::string name; 00066 ADXL362::ADXL362_register_t reg; 00067 if(start >= 0x00 && start <= 0x2E && length >= 0x00 && (ADXL362.read_reg(ADXL362.DEVID_AD) == 0xAD)) 00068 { 00069 if(length == 0) 00070 { 00071 start = 0; 00072 length = 47; 00073 } 00074 00075 for(i = start; i < start + length; i++) 00076 { 00077 switch(i) 00078 { 00079 case 0x00: 00080 name = "DEVID_AD"; 00081 reg = ADXL362.DEVID_AD; 00082 break; 00083 case 0x01: 00084 name = "DEVID_MST"; 00085 reg = ADXL362.DEVID_MST; 00086 break; 00087 case 0x02: 00088 name = "PARTID"; 00089 reg = ADXL362.PARTID; 00090 break; 00091 case 0x03: 00092 name = "REVID"; 00093 reg = ADXL362.REVID; 00094 break; 00095 case 0x08: 00096 name = "XDATA"; 00097 reg = ADXL362.XDATA; 00098 break; 00099 case 0x09: 00100 name = "YDATA"; 00101 reg = ADXL362.YDATA; 00102 break; 00103 case 0x0A: 00104 name = "ZDATA"; 00105 reg = ADXL362.ZDATA; 00106 break; 00107 case 0x0B: 00108 name = "STATUS"; 00109 reg = ADXL362.STATUS; 00110 break; 00111 case 0x0C: 00112 name = "FIFO_ENTRIES_L"; 00113 reg = ADXL362.FIFO_ENTRIES_L; 00114 break; 00115 case 0x0D: 00116 name = "FIFO_ENTRIES_H"; 00117 reg = ADXL362.FIFO_ENTRIES_H; 00118 break; 00119 case 0x0E: 00120 name = "XDATA_L"; 00121 reg = ADXL362.XDATA_L; 00122 break; 00123 case 0x0F: 00124 name = "XDATA_H"; 00125 reg = ADXL362.XDATA_H; 00126 break; 00127 case 0x10: 00128 name = "YDATA_L"; 00129 reg = ADXL362.YDATA_L; 00130 break; 00131 case 0x11: 00132 name = "YDATA_H"; 00133 reg = ADXL362.YDATA_H; 00134 break; 00135 case 0x12: 00136 name = "ZDATA_L"; 00137 reg = ADXL362.ZDATA_L; 00138 break; 00139 case 0x13: 00140 name = "ZDATA_H"; 00141 reg = ADXL362.ZDATA_H; 00142 break; 00143 case 0x14: 00144 name = "TEMP_L"; 00145 reg = ADXL362.TEMP_L; 00146 break; 00147 case 0x15: 00148 name = "TEMP_H"; 00149 reg = ADXL362.TEMP_H; 00150 break; 00151 case 0x1F: 00152 name = "SOFT_RESET"; 00153 reg = ADXL362.SOFT_RESET; 00154 break; 00155 case 0x20: 00156 name = "THRESH_ACT_L"; 00157 reg = ADXL362.THRESH_ACT_L; 00158 break; 00159 case 0x21: 00160 name = "THRESH_ACT_H"; 00161 reg = ADXL362.THRESH_ACT_H; 00162 break; 00163 case 0x22: 00164 name = "TIME_ACT"; 00165 reg = ADXL362.TIME_ACT; 00166 break; 00167 case 0x23: 00168 name = "THRESH_INACT_L"; 00169 reg = ADXL362.THRESH_INACT_L; 00170 break; 00171 case 0x24: 00172 name = "THRESH_INACT_H"; 00173 reg = ADXL362.THRESH_INACT_H; 00174 break; 00175 case 0x25: 00176 name = "TIME_INACT_L"; 00177 reg = ADXL362.TIME_INACT_L; 00178 break; 00179 case 0x26: 00180 name = "TIME_INACT_H"; 00181 reg = ADXL362.TIME_INACT_H; 00182 break; 00183 case 0x27: 00184 name = "ACT_INACT_CTL"; 00185 reg = ADXL362.ACT_INACT_CTL; 00186 break; 00187 case 0x28: 00188 name = "FIFO_CONTROL"; 00189 reg = ADXL362.FIFO_CONTROL; 00190 break; 00191 case 0x29: 00192 name = "FIFO_SAMPLES"; 00193 reg = ADXL362.FIFO_SAMPLES; 00194 break; 00195 case 0x2A: 00196 name = "INTMAP1"; 00197 reg = ADXL362.INTMAP1; 00198 break; 00199 case 0x2B: 00200 name = "INTMAP2"; 00201 reg = ADXL362.INTMAP2; 00202 break; 00203 case 0x2C: 00204 name = "FILTER_CTL"; 00205 reg = ADXL362.FILTER_CTL; 00206 break; 00207 case 0x2D: 00208 name = "POWER_CTL"; 00209 reg = ADXL362.POWER_CTL; 00210 break; 00211 case 0x2E: 00212 name = "SELF_TEST"; 00213 reg = ADXL362.SELF_TEST; 00214 break; 00215 } 00216 pc.printf("0x%x: %s=0x%x\n\r", i, name, ADXL362.read_reg(reg)); 00217 } 00218 } 00219 else 00220 { 00221 pc.printf("Error"); 00222 return(-1); 00223 } 00224 return(0); 00225 }
Generated on Wed Jul 13 2022 17:25:41 by
1.7.2