Timo Karppinen / Mbed OS Pmod_ACL2_ADXL362_L432KC_OS6_tk1

Dependencies:   ADXL362

Committer:
timo_k2
Date:
Wed Dec 30 14:41:19 2020 +0000
Revision:
5:4d6ef028eeae
Parent:
4:a6069cbc4c71
Child:
6:a0b604602460
Initial commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jackclar 0:1ca806626aba 1 #include "mbed.h"
jackclar 0:1ca806626aba 2 #include "ADXL362.h"
timo_k2 5:4d6ef028eeae 3
timo_k2 5:4d6ef028eeae 4
jackclar 0:1ca806626aba 5 // ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :
timo_k2 5:4d6ef028eeae 6 ADXL362 ADXL362(D5,D11,D12,D13);
timo_k2 5:4d6ef028eeae 7
timo_k2 5:4d6ef028eeae 8 DigitalOut moveLed(D1);
jackclar 0:1ca806626aba 9
jackclar 2:3299365b3e3c 10 int ADXL362_reg_print(int start, int length);
timo_k2 5:4d6ef028eeae 11 void ADXL362_movement_detect();
jackclar 0:1ca806626aba 12
jackclar 0:1ca806626aba 13 int main()
jackclar 0:1ca806626aba 14 {
jackclar 2:3299365b3e3c 15 ADXL362.reset();
timo_k2 5:4d6ef028eeae 16 // we need to wait at least 500ms after ADXL362 reset
timo_k2 5:4d6ef028eeae 17 ThisThread::sleep_for(600ms);
jackclar 2:3299365b3e3c 18 ADXL362.set_mode(ADXL362::MEASUREMENT);
jackclar 4:a6069cbc4c71 19 ADXL362_reg_print(0, 0);
timo_k2 5:4d6ef028eeae 20 ADXL362_movement_detect();
jackclar 2:3299365b3e3c 21 }
jackclar 2:3299365b3e3c 22
timo_k2 5:4d6ef028eeae 23 void ADXL362_movement_detect()
jackclar 2:3299365b3e3c 24 {
timo_k2 5:4d6ef028eeae 25 int8_t x1,y1,z1,x2,y2,z2,x,y,z,dx,dy,dz;
timo_k2 5:4d6ef028eeae 26 int i = 0;
jackclar 2:3299365b3e3c 27 while(1)
jackclar 2:3299365b3e3c 28 {
jackclar 2:3299365b3e3c 29
jackclar 2:3299365b3e3c 30 while(1)
jackclar 2:3299365b3e3c 31 {
jackclar 2:3299365b3e3c 32 x1=ADXL362.scanx_u8();
jackclar 2:3299365b3e3c 33 y1=ADXL362.scany_u8();
jackclar 2:3299365b3e3c 34 z1=ADXL362.scanz_u8();
timo_k2 5:4d6ef028eeae 35 ThisThread::sleep_for(10ms);
jackclar 2:3299365b3e3c 36 x2=ADXL362.scanx_u8();
jackclar 2:3299365b3e3c 37 y2=ADXL362.scany_u8();
jackclar 2:3299365b3e3c 38 z2=ADXL362.scanz_u8();
jackclar 2:3299365b3e3c 39
timo_k2 5:4d6ef028eeae 40 x=(x1 + x2)/2;
timo_k2 5:4d6ef028eeae 41 y=(y1 + y2)/2;
timo_k2 5:4d6ef028eeae 42 z=(z1 + z2)/2;
jackclar 2:3299365b3e3c 43
timo_k2 5:4d6ef028eeae 44 dx=abs(x1 - x2);
timo_k2 5:4d6ef028eeae 45 dy=abs(y1 - y2);
timo_k2 5:4d6ef028eeae 46 dz=abs(z1 - z2);
timo_k2 5:4d6ef028eeae 47
timo_k2 5:4d6ef028eeae 48 if (dx>10 || dy>10 || dz>10)
jackclar 2:3299365b3e3c 49 break;
jackclar 2:3299365b3e3c 50
timo_k2 5:4d6ef028eeae 51 printf("x = %3d y = %3d z = %3d dx = %3d dy = %3d dz = %3d\r\n",x,y,z,dx,dy,dz);
jackclar 2:3299365b3e3c 52 //pc.printf("x = %d, y = %d, z = %d\r\n", x1, y1, z1);
timo_k2 5:4d6ef028eeae 53 //wait_ms(10);
timo_k2 5:4d6ef028eeae 54 ThisThread::sleep_for(100ms);
jackclar 2:3299365b3e3c 55 }
jackclar 2:3299365b3e3c 56
timo_k2 5:4d6ef028eeae 57 moveLed = 1;
timo_k2 5:4d6ef028eeae 58 //wait(2);
timo_k2 5:4d6ef028eeae 59 ThisThread::sleep_for(2s);
timo_k2 5:4d6ef028eeae 60 moveLed = 0;
jackclar 2:3299365b3e3c 61 i++;
timo_k2 5:4d6ef028eeae 62 printf("%d\r\n", i);
jackclar 2:3299365b3e3c 63
jackclar 2:3299365b3e3c 64 }
jackclar 0:1ca806626aba 65 }
jackclar 0:1ca806626aba 66
jackclar 2:3299365b3e3c 67 int ADXL362_reg_print(int start, int length)
timo_k2 5:4d6ef028eeae 68 /*
timo_k2 5:4d6ef028eeae 69 * The register bit allocations are explained in the datasheet
timo_k2 5:4d6ef028eeae 70 * https://www.analog.com/media/en/technical-documentation/data-sheets/ADXL362.pdf
timo_k2 5:4d6ef028eeae 71 * starting on page 23.
timo_k2 5:4d6ef028eeae 72 */
jackclar 0:1ca806626aba 73 {
jackclar 2:3299365b3e3c 74 uint8_t i;
timo_k2 5:4d6ef028eeae 75 char name[32];
timo_k2 5:4d6ef028eeae 76 char note[64];
timo_k2 5:4d6ef028eeae 77
jackclar 2:3299365b3e3c 78 ADXL362::ADXL362_register_t reg;
jackclar 4:a6069cbc4c71 79 if(start >= 0x00 && start <= 0x2E && length >= 0x00 && (ADXL362.read_reg(ADXL362.DEVID_AD) == 0xAD))
jackclar 0:1ca806626aba 80 {
jackclar 2:3299365b3e3c 81 if(length == 0)
jackclar 2:3299365b3e3c 82 {
jackclar 2:3299365b3e3c 83 start = 0;
jackclar 2:3299365b3e3c 84 length = 47;
jackclar 2:3299365b3e3c 85 }
jackclar 2:3299365b3e3c 86
jackclar 2:3299365b3e3c 87 for(i = start; i < start + length; i++)
jackclar 0:1ca806626aba 88 {
jackclar 2:3299365b3e3c 89 switch(i)
jackclar 2:3299365b3e3c 90 {
jackclar 2:3299365b3e3c 91 case 0x00:
timo_k2 5:4d6ef028eeae 92 snprintf(name, 32, "DEVID_AD" );
timo_k2 5:4d6ef028eeae 93 snprintf(note, 64, "default 0xAD = I am the ADXL362");
jackclar 2:3299365b3e3c 94 reg = ADXL362.DEVID_AD;
jackclar 2:3299365b3e3c 95 break;
jackclar 2:3299365b3e3c 96 case 0x01:
timo_k2 5:4d6ef028eeae 97 snprintf(name, 32, "DEVID_MST" );
timo_k2 5:4d6ef028eeae 98 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 99 reg = ADXL362.DEVID_MST;
jackclar 2:3299365b3e3c 100 break;
jackclar 2:3299365b3e3c 101 case 0x02:
timo_k2 5:4d6ef028eeae 102 snprintf(name, 32, "PARTID" );
timo_k2 5:4d6ef028eeae 103 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 104 reg = ADXL362.PARTID;
jackclar 2:3299365b3e3c 105 break;
jackclar 2:3299365b3e3c 106 case 0x03:
timo_k2 5:4d6ef028eeae 107 snprintf(name, 32, "REVID" );
timo_k2 5:4d6ef028eeae 108 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 109 reg = ADXL362.REVID;
jackclar 2:3299365b3e3c 110 break;
jackclar 2:3299365b3e3c 111 case 0x08:
timo_k2 5:4d6ef028eeae 112 snprintf(name, 32, "XDATA" );
timo_k2 5:4d6ef028eeae 113 snprintf(note, 63, "binary 8bit, two's complement");
jackclar 2:3299365b3e3c 114 reg = ADXL362.XDATA;
jackclar 2:3299365b3e3c 115 break;
jackclar 2:3299365b3e3c 116 case 0x09:
timo_k2 5:4d6ef028eeae 117 snprintf(name, 32, "YDATA" );
timo_k2 5:4d6ef028eeae 118 snprintf(note, 64, "binary 8bit, two's complement");
jackclar 2:3299365b3e3c 119 reg = ADXL362.YDATA;
jackclar 2:3299365b3e3c 120 break;
jackclar 2:3299365b3e3c 121 case 0x0A:
timo_k2 5:4d6ef028eeae 122 snprintf(name, 32, "ZDATA" );
timo_k2 5:4d6ef028eeae 123 snprintf(note, 64, "binary 8bit, two's complement");
jackclar 2:3299365b3e3c 124 reg = ADXL362.ZDATA;
jackclar 2:3299365b3e3c 125 break;
jackclar 2:3299365b3e3c 126 case 0x0B:
timo_k2 5:4d6ef028eeae 127 snprintf(name, 32, "STATUS" );
timo_k2 5:4d6ef028eeae 128 snprintf(note, 64, "typically 0x41, 4=awake, 1=data ready");
jackclar 2:3299365b3e3c 129 reg = ADXL362.STATUS;
jackclar 2:3299365b3e3c 130 break;
jackclar 2:3299365b3e3c 131 case 0x0C:
timo_k2 5:4d6ef028eeae 132 snprintf(name, 32, "FIFO_ENTRIES_L" );
timo_k2 5:4d6ef028eeae 133 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 134 reg = ADXL362.FIFO_ENTRIES_L;
jackclar 2:3299365b3e3c 135 break;
jackclar 2:3299365b3e3c 136 case 0x0D:
timo_k2 5:4d6ef028eeae 137 snprintf(name, 32, "FIFO_ENTRIES_H" );
timo_k2 5:4d6ef028eeae 138 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 139 reg = ADXL362.FIFO_ENTRIES_H;
jackclar 2:3299365b3e3c 140 break;
jackclar 2:3299365b3e3c 141 case 0x0E:
timo_k2 5:4d6ef028eeae 142 snprintf(name, 32, "XDATA_L" );
timo_k2 5:4d6ef028eeae 143 snprintf(note, 64, "binary 12bit, two's complement");
jackclar 2:3299365b3e3c 144 reg = ADXL362.XDATA_L;
jackclar 2:3299365b3e3c 145 break;
jackclar 2:3299365b3e3c 146 case 0x0F:
timo_k2 5:4d6ef028eeae 147 snprintf(name, 32, "XDATA_H" );
timo_k2 5:4d6ef028eeae 148 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 149 reg = ADXL362.XDATA_H;
jackclar 2:3299365b3e3c 150 break;
jackclar 2:3299365b3e3c 151 case 0x10:
timo_k2 5:4d6ef028eeae 152 snprintf(name, 32, "YDATA_L" );
timo_k2 5:4d6ef028eeae 153 snprintf(note, 64, "binary 12bit, two's complement");
jackclar 2:3299365b3e3c 154 reg = ADXL362.YDATA_L;
jackclar 2:3299365b3e3c 155 break;
jackclar 2:3299365b3e3c 156 case 0x11:
timo_k2 5:4d6ef028eeae 157 snprintf(name, 32, "YDATA_H" );
timo_k2 5:4d6ef028eeae 158 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 159 reg = ADXL362.YDATA_H;
jackclar 2:3299365b3e3c 160 break;
jackclar 2:3299365b3e3c 161 case 0x12:
timo_k2 5:4d6ef028eeae 162 snprintf(name, 32, "ZDATA_L" );
timo_k2 5:4d6ef028eeae 163 snprintf(note, 64, "binary 12bit, two's complement");
jackclar 2:3299365b3e3c 164 reg = ADXL362.ZDATA_L;
jackclar 2:3299365b3e3c 165 break;
jackclar 2:3299365b3e3c 166 case 0x13:
timo_k2 5:4d6ef028eeae 167 snprintf(name, 32, "ZDATA_H" );
timo_k2 5:4d6ef028eeae 168 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 169 reg = ADXL362.ZDATA_H;
jackclar 2:3299365b3e3c 170 break;
jackclar 2:3299365b3e3c 171 case 0x14:
timo_k2 5:4d6ef028eeae 172 snprintf(name, 32, "TEMP_L" );
timo_k2 5:4d6ef028eeae 173 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 174 reg = ADXL362.TEMP_L;
jackclar 2:3299365b3e3c 175 break;
jackclar 2:3299365b3e3c 176 case 0x15:
timo_k2 5:4d6ef028eeae 177 snprintf(name, 32, "TEMP_H" );
timo_k2 5:4d6ef028eeae 178 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 179 reg = ADXL362.TEMP_H;
jackclar 2:3299365b3e3c 180 break;
jackclar 2:3299365b3e3c 181 case 0x1F:
timo_k2 5:4d6ef028eeae 182 snprintf(name, 32, "SOFT_RESET" );
timo_k2 5:4d6ef028eeae 183 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 184 reg = ADXL362.SOFT_RESET;
jackclar 2:3299365b3e3c 185 break;
jackclar 2:3299365b3e3c 186 case 0x20:
timo_k2 5:4d6ef028eeae 187 snprintf(name, 32, "THRESH_ACT_L" );
timo_k2 5:4d6ef028eeae 188 snprintf(note, 64, "Activity threshold value, binary 16bit");
jackclar 2:3299365b3e3c 189 reg = ADXL362.THRESH_ACT_L;
jackclar 2:3299365b3e3c 190 break;
jackclar 2:3299365b3e3c 191 case 0x21:
timo_k2 5:4d6ef028eeae 192 snprintf(name, 32, "THRESH_ACT_H" );
timo_k2 5:4d6ef028eeae 193 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 194 reg = ADXL362.THRESH_ACT_H;
jackclar 2:3299365b3e3c 195 break;
jackclar 2:3299365b3e3c 196 case 0x22:
timo_k2 5:4d6ef028eeae 197 snprintf(name, 32, "TIME_ACT" );
timo_k2 5:4d6ef028eeae 198 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 199 reg = ADXL362.TIME_ACT;
jackclar 2:3299365b3e3c 200 break;
jackclar 2:3299365b3e3c 201 case 0x23:
timo_k2 5:4d6ef028eeae 202 snprintf(name, 32, "THRESH_INACT_L" );
timo_k2 5:4d6ef028eeae 203 snprintf(note, 64, "Inactivity threshold value, binary 16bit");
jackclar 2:3299365b3e3c 204 reg = ADXL362.THRESH_INACT_L;
jackclar 2:3299365b3e3c 205 break;
jackclar 2:3299365b3e3c 206 case 0x24:
timo_k2 5:4d6ef028eeae 207 snprintf(name, 32, "THRESH_INACT_H" );
timo_k2 5:4d6ef028eeae 208 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 209 reg = ADXL362.THRESH_INACT_H;
jackclar 2:3299365b3e3c 210 break;
jackclar 2:3299365b3e3c 211 case 0x25:
timo_k2 5:4d6ef028eeae 212 snprintf(name, 32, "TIME_INACT_L" );
timo_k2 5:4d6ef028eeae 213 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 214 reg = ADXL362.TIME_INACT_L;
jackclar 2:3299365b3e3c 215 break;
jackclar 2:3299365b3e3c 216 case 0x26:
timo_k2 5:4d6ef028eeae 217 snprintf(name, 32, "TIME_INACT_H" );
timo_k2 5:4d6ef028eeae 218 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 219 reg = ADXL362.TIME_INACT_H;
jackclar 2:3299365b3e3c 220 break;
jackclar 2:3299365b3e3c 221 case 0x27:
timo_k2 5:4d6ef028eeae 222 snprintf(name, 32, "ACT_INACT_CTL" );
timo_k2 5:4d6ef028eeae 223 snprintf(note, 64, "default 0x00 = disable, 0x01 = enable");
jackclar 2:3299365b3e3c 224 reg = ADXL362.ACT_INACT_CTL;
jackclar 2:3299365b3e3c 225 break;
jackclar 2:3299365b3e3c 226 case 0x28:
timo_k2 5:4d6ef028eeae 227 snprintf(name, 32, "FIFO_CONTROL" );
timo_k2 5:4d6ef028eeae 228 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 229 reg = ADXL362.FIFO_CONTROL;
jackclar 2:3299365b3e3c 230 break;
jackclar 2:3299365b3e3c 231 case 0x29:
timo_k2 5:4d6ef028eeae 232 snprintf(name, 32, "FIFO_SAMPLES" );
timo_k2 5:4d6ef028eeae 233 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 234 reg = ADXL362.FIFO_SAMPLES;
jackclar 2:3299365b3e3c 235 break;
jackclar 2:3299365b3e3c 236 case 0x2A:
timo_k2 5:4d6ef028eeae 237 snprintf(name, 32, "INTMAP1" );
timo_k2 5:4d6ef028eeae 238 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 239 reg = ADXL362.INTMAP1;
jackclar 2:3299365b3e3c 240 break;
jackclar 2:3299365b3e3c 241 case 0x2B:
timo_k2 5:4d6ef028eeae 242 snprintf(name, 32, "INTMAP2" );
timo_k2 5:4d6ef028eeae 243 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 244 reg = ADXL362.INTMAP2;
jackclar 2:3299365b3e3c 245 break;
jackclar 2:3299365b3e3c 246 case 0x2C:
timo_k2 5:4d6ef028eeae 247 snprintf(name, 32, "FILTER_CTL" );
timo_k2 5:4d6ef028eeae 248 snprintf(note, 64, "default 0x13, 1=half samplin freq, 3=freq 100 sampl/sec");
jackclar 2:3299365b3e3c 249 reg = ADXL362.FILTER_CTL;
jackclar 2:3299365b3e3c 250 break;
jackclar 2:3299365b3e3c 251 case 0x2D:
timo_k2 5:4d6ef028eeae 252 snprintf(name, 32, "POWER_CTL" );
timo_k2 5:4d6ef028eeae 253 snprintf(note, 64, "default 0x02 = measure 3D");
jackclar 2:3299365b3e3c 254 reg = ADXL362.POWER_CTL;
jackclar 2:3299365b3e3c 255 break;
jackclar 2:3299365b3e3c 256 case 0x2E:
timo_k2 5:4d6ef028eeae 257 snprintf(name, 32, "SELF_TEST" );
timo_k2 5:4d6ef028eeae 258 snprintf(note, 64, "-");
jackclar 2:3299365b3e3c 259 reg = ADXL362.SELF_TEST;
jackclar 2:3299365b3e3c 260 break;
jackclar 2:3299365b3e3c 261 }
timo_k2 5:4d6ef028eeae 262 // Printing register content as hexadecimal and the notes
timo_k2 5:4d6ef028eeae 263 printf("register %d %s %x %s\n", i, name, ADXL362.read_reg(reg), note);
jackclar 0:1ca806626aba 264 }
jackclar 0:1ca806626aba 265 }
jackclar 0:1ca806626aba 266 else
jackclar 0:1ca806626aba 267 {
timo_k2 5:4d6ef028eeae 268 printf("Error");
jackclar 2:3299365b3e3c 269 return(-1);
jackclar 2:3299365b3e3c 270 }
jackclar 2:3299365b3e3c 271 return(0);
timo_k2 5:4d6ef028eeae 272 }