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.
Diff: main.cpp
- Revision:
- 5:4d6ef028eeae
- Parent:
- 4:a6069cbc4c71
- Child:
- 6:a0b604602460
--- a/main.cpp Fri Feb 23 16:48:58 2018 +0000 +++ b/main.cpp Wed Dec 30 14:41:19 2020 +0000 @@ -1,30 +1,29 @@ #include "mbed.h" #include "ADXL362.h" -#include <string> -#include <stdlib.h> - -// Interface pulled from ADXL362.cpp + + // ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) : -ADXL362 ADXL362(PA_0,PA_7,PA_6,PA_1); -Serial pc(USBTX, USBRX); -DigitalOut myled(LED3); +ADXL362 ADXL362(D5,D11,D12,D13); + +DigitalOut moveLed(D1); int ADXL362_reg_print(int start, int length); -void ADXL362_knock_detect(); +void ADXL362_movement_detect(); int main() { ADXL362.reset(); - wait_ms(600); // we need to wait at least 500ms after ADXL362 reset + // we need to wait at least 500ms after ADXL362 reset + ThisThread::sleep_for(600ms); ADXL362.set_mode(ADXL362::MEASUREMENT); - //ADXL362_knock_detect(); ADXL362_reg_print(0, 0); + ADXL362_movement_detect(); } -void ADXL362_knock_detect() +void ADXL362_movement_detect() { - int8_t x1,y1,z1,x2,y2,z2,x,y,z; - int i = 0; + int8_t x1,y1,z1,x2,y2,z2,x,y,z,dx,dy,dz; + int i = 0; while(1) { @@ -33,36 +32,49 @@ x1=ADXL362.scanx_u8(); y1=ADXL362.scany_u8(); z1=ADXL362.scanz_u8(); - wait_ms(10); + ThisThread::sleep_for(10ms); x2=ADXL362.scanx_u8(); y2=ADXL362.scany_u8(); z2=ADXL362.scanz_u8(); - x=abs(x1 - x2); - y=abs(y1 - y2); - z=abs(z1 - z2); + x=(x1 + x2)/2; + y=(y1 + y2)/2; + z=(z1 + z2)/2; - if (x>7 || y>7 || z>20) + dx=abs(x1 - x2); + dy=abs(y1 - y2); + dz=abs(z1 - z2); + + if (dx>10 || dy>10 || dz>10) break; - //printf("x = %d y = %d z = %d\r\n",x,y,z); + 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); + //wait_ms(10); + ThisThread::sleep_for(100ms); } - myled = 1; - wait(2); - myled = 0; + moveLed = 1; + //wait(2); + ThisThread::sleep_for(2s); + moveLed = 0; i++; - pc.printf("%d\r\n", 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; - std::string name; + 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)) { @@ -77,149 +89,184 @@ switch(i) { case 0x00: - name = "DEVID_AD"; + snprintf(name, 32, "DEVID_AD" ); + snprintf(note, 64, "default 0xAD = I am the ADXL362"); reg = ADXL362.DEVID_AD; break; case 0x01: - name = "DEVID_MST"; + snprintf(name, 32, "DEVID_MST" ); + snprintf(note, 64, "-"); reg = ADXL362.DEVID_MST; break; case 0x02: - name = "PARTID"; + snprintf(name, 32, "PARTID" ); + snprintf(note, 64, "-"); reg = ADXL362.PARTID; break; case 0x03: - name = "REVID"; + snprintf(name, 32, "REVID" ); + snprintf(note, 64, "-"); reg = ADXL362.REVID; break; case 0x08: - name = "XDATA"; + snprintf(name, 32, "XDATA" ); + snprintf(note, 63, "binary 8bit, two's complement"); reg = ADXL362.XDATA; break; case 0x09: - name = "YDATA"; + snprintf(name, 32, "YDATA" ); + snprintf(note, 64, "binary 8bit, two's complement"); reg = ADXL362.YDATA; break; case 0x0A: - name = "ZDATA"; + snprintf(name, 32, "ZDATA" ); + snprintf(note, 64, "binary 8bit, two's complement"); reg = ADXL362.ZDATA; break; case 0x0B: - name = "STATUS"; + snprintf(name, 32, "STATUS" ); + snprintf(note, 64, "typically 0x41, 4=awake, 1=data ready"); reg = ADXL362.STATUS; break; case 0x0C: - name = "FIFO_ENTRIES_L"; + snprintf(name, 32, "FIFO_ENTRIES_L" ); + snprintf(note, 64, "-"); reg = ADXL362.FIFO_ENTRIES_L; break; case 0x0D: - name = "FIFO_ENTRIES_H"; + snprintf(name, 32, "FIFO_ENTRIES_H" ); + snprintf(note, 64, "-"); reg = ADXL362.FIFO_ENTRIES_H; break; case 0x0E: - name = "XDATA_L"; + snprintf(name, 32, "XDATA_L" ); + snprintf(note, 64, "binary 12bit, two's complement"); reg = ADXL362.XDATA_L; break; case 0x0F: - name = "XDATA_H"; + snprintf(name, 32, "XDATA_H" ); + snprintf(note, 64, "-"); reg = ADXL362.XDATA_H; break; case 0x10: - name = "YDATA_L"; + snprintf(name, 32, "YDATA_L" ); + snprintf(note, 64, "binary 12bit, two's complement"); reg = ADXL362.YDATA_L; break; case 0x11: - name = "YDATA_H"; + snprintf(name, 32, "YDATA_H" ); + snprintf(note, 64, "-"); reg = ADXL362.YDATA_H; break; case 0x12: - name = "ZDATA_L"; + snprintf(name, 32, "ZDATA_L" ); + snprintf(note, 64, "binary 12bit, two's complement"); reg = ADXL362.ZDATA_L; break; case 0x13: - name = "ZDATA_H"; + snprintf(name, 32, "ZDATA_H" ); + snprintf(note, 64, "-"); reg = ADXL362.ZDATA_H; break; case 0x14: - name = "TEMP_L"; + snprintf(name, 32, "TEMP_L" ); + snprintf(note, 64, "-"); reg = ADXL362.TEMP_L; break; case 0x15: - name = "TEMP_H"; + snprintf(name, 32, "TEMP_H" ); + snprintf(note, 64, "-"); reg = ADXL362.TEMP_H; break; case 0x1F: - name = "SOFT_RESET"; + snprintf(name, 32, "SOFT_RESET" ); + snprintf(note, 64, "-"); reg = ADXL362.SOFT_RESET; break; case 0x20: - name = "THRESH_ACT_L"; + snprintf(name, 32, "THRESH_ACT_L" ); + snprintf(note, 64, "Activity threshold value, binary 16bit"); reg = ADXL362.THRESH_ACT_L; break; case 0x21: - name = "THRESH_ACT_H"; + snprintf(name, 32, "THRESH_ACT_H" ); + snprintf(note, 64, "-"); reg = ADXL362.THRESH_ACT_H; break; case 0x22: - name = "TIME_ACT"; + snprintf(name, 32, "TIME_ACT" ); + snprintf(note, 64, "-"); reg = ADXL362.TIME_ACT; break; case 0x23: - name = "THRESH_INACT_L"; + snprintf(name, 32, "THRESH_INACT_L" ); + snprintf(note, 64, "Inactivity threshold value, binary 16bit"); reg = ADXL362.THRESH_INACT_L; break; case 0x24: - name = "THRESH_INACT_H"; + snprintf(name, 32, "THRESH_INACT_H" ); + snprintf(note, 64, "-"); reg = ADXL362.THRESH_INACT_H; break; case 0x25: - name = "TIME_INACT_L"; + snprintf(name, 32, "TIME_INACT_L" ); + snprintf(note, 64, "-"); reg = ADXL362.TIME_INACT_L; break; case 0x26: - name = "TIME_INACT_H"; + snprintf(name, 32, "TIME_INACT_H" ); + snprintf(note, 64, "-"); reg = ADXL362.TIME_INACT_H; break; case 0x27: - name = "ACT_INACT_CTL"; + snprintf(name, 32, "ACT_INACT_CTL" ); + snprintf(note, 64, "default 0x00 = disable, 0x01 = enable"); reg = ADXL362.ACT_INACT_CTL; break; case 0x28: - name = "FIFO_CONTROL"; + snprintf(name, 32, "FIFO_CONTROL" ); + snprintf(note, 64, "-"); reg = ADXL362.FIFO_CONTROL; break; case 0x29: - name = "FIFO_SAMPLES"; + snprintf(name, 32, "FIFO_SAMPLES" ); + snprintf(note, 64, "-"); reg = ADXL362.FIFO_SAMPLES; break; case 0x2A: - name = "INTMAP1"; + snprintf(name, 32, "INTMAP1" ); + snprintf(note, 64, "-"); reg = ADXL362.INTMAP1; break; case 0x2B: - name = "INTMAP2"; + snprintf(name, 32, "INTMAP2" ); + snprintf(note, 64, "-"); reg = ADXL362.INTMAP2; break; case 0x2C: - name = "FILTER_CTL"; + 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: - name = "POWER_CTL"; + snprintf(name, 32, "POWER_CTL" ); + snprintf(note, 64, "default 0x02 = measure 3D"); reg = ADXL362.POWER_CTL; break; case 0x2E: - name = "SELF_TEST"; + snprintf(name, 32, "SELF_TEST" ); + snprintf(note, 64, "-"); reg = ADXL362.SELF_TEST; break; } - pc.printf("0x%x: %s=0x%x\n\r", i, name, ADXL362.read_reg(reg)); + // Printing register content as hexadecimal and the notes + printf("register %d %s %x %s\n", i, name, ADXL362.read_reg(reg), note); } } else { - pc.printf("Error"); + printf("Error"); return(-1); } return(0); -} +} \ No newline at end of file