Timo Karppinen / Mbed OS Pmod_ACL2_ADXL362_L432KC_OS6_tk1

Dependencies:   ADXL362

Files at this revision

API Documentation at this revision

Comitter:
timo_k2
Date:
Wed Apr 28 14:48:15 2021 +0000
Parent:
6:a0b604602460
Commit message:
Sensor reading is in a separate thread. The results can be used in the main thread.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed_app.json Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Dec 30 15:19:15 2020 +0000
+++ b/main.cpp	Wed Apr 28 14:48:15 2021 +0000
@@ -36,66 +36,115 @@
 
 #include "mbed.h"
 #include "ADXL362.h"
+#include <cmath>
+#define BUFF_SIZE 6
 
 // ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :
 ADXL362 ADXL362(D5,D11,D12,D13);
 
+//Threads
+    Thread detect_thread;
+
 DigitalOut moveLed(D1);
 
 int ADXL362_reg_print(int start, int length);
-void ADXL362_movement_detect();
+int ADXL362_movement_detect();
+int acceleration3D(int8_t ax,int8_t ay,int8_t az);
 
-int main()
-{
+int8_t x,y,z;
+int movementDetected = 0;
+int i = 0;
+
+
+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();
+    detect_thread.start(ADXL362_movement_detect);
+    
+    while(1){
+    moveLed.write(movementDetected);
+    if(movementDetected){
+        i += 1;
+        printf("i = %d\n", i);
+        }
+    printf("Acceleration 3D %d\n", acceleration3D(x,y,z));
+    ThisThread::sleep_for(1s);
+    }
 }
 
-void ADXL362_movement_detect()
+int 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;
+    int8_t x1,y1,z1,x2,y2,z2,dx,dy,dz;
+    int detect;
+    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();
             
-            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);
-            ThisThread::sleep_for(100ms);
+        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){
+            detect = 1;
+            }
+            else{
+            detect = 0;
+            }
+        movementDetected = detect;    
+        printf("x = %3d    y = %3d    z = %3d   dx = %3d    dy = %3d    dz = %3d\r\n",x,y,z,dx,dy,dz);
+        ThisThread::sleep_for(100ms);
+        }    
+}
+
+int acceleration3D(int8_t ax,int8_t ay,int8_t az){
+    float acc3D;
+    static int count = 0;
+    static int8_t x1[BUFF_SIZE];
+    static int8_t y1[BUFF_SIZE];
+    static int8_t z1[BUFF_SIZE];
+    float averx;
+    float avery;
+    float averz;
+    
+    if(count >= BUFF_SIZE){
+        count = 0;
         }
-        
-        moveLed = 1;
-        //wait(2);
-        ThisThread::sleep_for(2s);
-        moveLed = 0;
-        i++;
-        printf("%d\r\n", i);
-        
-     }
-}
+    
+    x1[count]=ax;
+    y1[count]=ay;
+    z1[count]=az;
+    
+    count += 1;
+    
+    averx=0.0;
+    avery=0.0;
+    averz=0.0;
+    for(int k=0; k<BUFF_SIZE; k++){
+        averx = averx+(float)x1[k];
+        avery = avery+(float)y1[k];
+        averz = averz+(float)z1[k];
+        }
+    averx=averx/BUFF_SIZE;
+    avery=avery/BUFF_SIZE;
+    averz=averz/BUFF_SIZE;
+    
+    acc3D = sqrtf(pow(averx,2)+pow(avery,2)+pow(averz,2));
+    //acc3D = sqrtf(pow(3.0,2) + pow(3.0,2) + pow(3.0,2));
+    return((int)acc3D); 
+}  
 
 int ADXL362_reg_print(int start, int length)
 /*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_app.json	Wed Apr 28 14:48:15 2021 +0000
@@ -0,0 +1,9 @@
+{
+    "target_overrides": {
+        "*": {
+            "platform.stdio-baud-rate": 115200,
+            "platform.stdio-buffered-serial": 1
+            
+        } 
+    }
+}
\ No newline at end of file