Timo Karppinen / Mbed OS Pmod_ACL2_ADXL362_L432KC_OS6_tk1

Dependencies:   ADXL362

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