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
- Committer:
- timo_k2
- Date:
- 2020-12-30
- Revision:
- 5:4d6ef028eeae
- Parent:
- 4:a6069cbc4c71
- Child:
- 6:a0b604602460
File content as of revision 5:4d6ef028eeae:
#include "mbed.h" #include "ADXL362.h" // ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) : ADXL362 ADXL362(D5,D11,D12,D13); DigitalOut moveLed(D1); int ADXL362_reg_print(int start, int length); void ADXL362_movement_detect(); int main() { ADXL362.reset(); // we need to wait at least 500ms after ADXL362 reset ThisThread::sleep_for(600ms); ADXL362.set_mode(ADXL362::MEASUREMENT); ADXL362_reg_print(0, 0); ADXL362_movement_detect(); } void ADXL362_movement_detect() { int8_t x1,y1,z1,x2,y2,z2,x,y,z,dx,dy,dz; int i = 0; while(1) { while(1) { x1=ADXL362.scanx_u8(); y1=ADXL362.scany_u8(); z1=ADXL362.scanz_u8(); ThisThread::sleep_for(10ms); x2=ADXL362.scanx_u8(); y2=ADXL362.scany_u8(); z2=ADXL362.scanz_u8(); x=(x1 + x2)/2; y=(y1 + y2)/2; z=(z1 + z2)/2; dx=abs(x1 - x2); dy=abs(y1 - y2); dz=abs(z1 - z2); if (dx>10 || dy>10 || dz>10) break; printf("x = %3d y = %3d z = %3d dx = %3d dy = %3d dz = %3d\r\n",x,y,z,dx,dy,dz); //pc.printf("x = %d, y = %d, z = %d\r\n", x1, y1, z1); //wait_ms(10); ThisThread::sleep_for(100ms); } moveLed = 1; //wait(2); ThisThread::sleep_for(2s); moveLed = 0; i++; printf("%d\r\n", i); } } int ADXL362_reg_print(int start, int length) /* * The register bit allocations are explained in the datasheet * https://www.analog.com/media/en/technical-documentation/data-sheets/ADXL362.pdf * starting on page 23. */ { uint8_t i; char name[32]; char note[64]; ADXL362::ADXL362_register_t reg; if(start >= 0x00 && start <= 0x2E && length >= 0x00 && (ADXL362.read_reg(ADXL362.DEVID_AD) == 0xAD)) { if(length == 0) { start = 0; length = 47; } for(i = start; i < start + length; i++) { switch(i) { case 0x00: snprintf(name, 32, "DEVID_AD" ); snprintf(note, 64, "default 0xAD = I am the ADXL362"); reg = ADXL362.DEVID_AD; break; case 0x01: snprintf(name, 32, "DEVID_MST" ); snprintf(note, 64, "-"); reg = ADXL362.DEVID_MST; break; case 0x02: snprintf(name, 32, "PARTID" ); snprintf(note, 64, "-"); reg = ADXL362.PARTID; break; case 0x03: snprintf(name, 32, "REVID" ); snprintf(note, 64, "-"); reg = ADXL362.REVID; break; case 0x08: snprintf(name, 32, "XDATA" ); snprintf(note, 63, "binary 8bit, two's complement"); reg = ADXL362.XDATA; break; case 0x09: snprintf(name, 32, "YDATA" ); snprintf(note, 64, "binary 8bit, two's complement"); reg = ADXL362.YDATA; break; case 0x0A: snprintf(name, 32, "ZDATA" ); snprintf(note, 64, "binary 8bit, two's complement"); reg = ADXL362.ZDATA; break; case 0x0B: snprintf(name, 32, "STATUS" ); snprintf(note, 64, "typically 0x41, 4=awake, 1=data ready"); reg = ADXL362.STATUS; break; case 0x0C: snprintf(name, 32, "FIFO_ENTRIES_L" ); snprintf(note, 64, "-"); reg = ADXL362.FIFO_ENTRIES_L; break; case 0x0D: snprintf(name, 32, "FIFO_ENTRIES_H" ); snprintf(note, 64, "-"); reg = ADXL362.FIFO_ENTRIES_H; break; case 0x0E: snprintf(name, 32, "XDATA_L" ); snprintf(note, 64, "binary 12bit, two's complement"); reg = ADXL362.XDATA_L; break; case 0x0F: snprintf(name, 32, "XDATA_H" ); snprintf(note, 64, "-"); reg = ADXL362.XDATA_H; break; case 0x10: snprintf(name, 32, "YDATA_L" ); snprintf(note, 64, "binary 12bit, two's complement"); reg = ADXL362.YDATA_L; break; case 0x11: snprintf(name, 32, "YDATA_H" ); snprintf(note, 64, "-"); reg = ADXL362.YDATA_H; break; case 0x12: snprintf(name, 32, "ZDATA_L" ); snprintf(note, 64, "binary 12bit, two's complement"); reg = ADXL362.ZDATA_L; break; case 0x13: snprintf(name, 32, "ZDATA_H" ); snprintf(note, 64, "-"); reg = ADXL362.ZDATA_H; break; case 0x14: snprintf(name, 32, "TEMP_L" ); snprintf(note, 64, "-"); reg = ADXL362.TEMP_L; break; case 0x15: snprintf(name, 32, "TEMP_H" ); snprintf(note, 64, "-"); reg = ADXL362.TEMP_H; break; case 0x1F: snprintf(name, 32, "SOFT_RESET" ); snprintf(note, 64, "-"); reg = ADXL362.SOFT_RESET; break; case 0x20: snprintf(name, 32, "THRESH_ACT_L" ); snprintf(note, 64, "Activity threshold value, binary 16bit"); reg = ADXL362.THRESH_ACT_L; break; case 0x21: snprintf(name, 32, "THRESH_ACT_H" ); snprintf(note, 64, "-"); reg = ADXL362.THRESH_ACT_H; break; case 0x22: snprintf(name, 32, "TIME_ACT" ); snprintf(note, 64, "-"); reg = ADXL362.TIME_ACT; break; case 0x23: snprintf(name, 32, "THRESH_INACT_L" ); snprintf(note, 64, "Inactivity threshold value, binary 16bit"); reg = ADXL362.THRESH_INACT_L; break; case 0x24: snprintf(name, 32, "THRESH_INACT_H" ); snprintf(note, 64, "-"); reg = ADXL362.THRESH_INACT_H; break; case 0x25: snprintf(name, 32, "TIME_INACT_L" ); snprintf(note, 64, "-"); reg = ADXL362.TIME_INACT_L; break; case 0x26: snprintf(name, 32, "TIME_INACT_H" ); snprintf(note, 64, "-"); reg = ADXL362.TIME_INACT_H; break; case 0x27: snprintf(name, 32, "ACT_INACT_CTL" ); snprintf(note, 64, "default 0x00 = disable, 0x01 = enable"); reg = ADXL362.ACT_INACT_CTL; break; case 0x28: snprintf(name, 32, "FIFO_CONTROL" ); snprintf(note, 64, "-"); reg = ADXL362.FIFO_CONTROL; break; case 0x29: snprintf(name, 32, "FIFO_SAMPLES" ); snprintf(note, 64, "-"); reg = ADXL362.FIFO_SAMPLES; break; case 0x2A: snprintf(name, 32, "INTMAP1" ); snprintf(note, 64, "-"); reg = ADXL362.INTMAP1; break; case 0x2B: snprintf(name, 32, "INTMAP2" ); snprintf(note, 64, "-"); reg = ADXL362.INTMAP2; break; case 0x2C: snprintf(name, 32, "FILTER_CTL" ); snprintf(note, 64, "default 0x13, 1=half samplin freq, 3=freq 100 sampl/sec"); reg = ADXL362.FILTER_CTL; break; case 0x2D: snprintf(name, 32, "POWER_CTL" ); snprintf(note, 64, "default 0x02 = measure 3D"); reg = ADXL362.POWER_CTL; break; case 0x2E: snprintf(name, 32, "SELF_TEST" ); snprintf(note, 64, "-"); reg = ADXL362.SELF_TEST; break; } // Printing register content as hexadecimal and the notes printf("register %d %s %x %s\n", i, name, ADXL362.read_reg(reg), note); } } else { printf("Error"); return(-1); } return(0); }