.

Dependencies:   SHT3XA mbed LIS3DH mbed-rtos USBDevice

main.cpp

Committer:
diogo966
Date:
2018-12-16
Revision:
1:323175fe9443
Parent:
0:941291e23892

File content as of revision 1:323175fe9443:

#include "mbed.h"
#include "USBSerial.h"
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "SHT3XA.h"
#include "rtos.h"

I2C i2c(PB_9,PB_8);
SHT3XA sht31a(PA_4);
int Acel_Buffer[4];
float Acel_value=0;
int ddx = 1;
char ccc;

USBSerial usb_serial;
DigitalOut led(LED3);
DigitalOut led2(LED4);

Thread thread;

//GPS_Coordenates[80];
// addr
#define WRITE_ADDR 0x52
#define READ_ADDR 0x53
//   LIS3DH ID
#define I_AM_LIS3DH         0x33

//  Register's definition
#define LIS3DH_STATUS_REG_AUX  0x07
#define LIS3DH_OUT_ADC1_L      0x08
#define LIS3DH_OUT_ADC1_H      0x09
#define LIS3DH_OUT_ADC2_L      0x0a
#define LIS3DH_OUT_ADC2_H      0x0b
#define LIS3DH_OUT_ADC3_L      0x0c
#define LIS3DH_OUT_ADC3_H      0x0d
#define LIS3DH_INT_COUNTER_REG 0x0e
#define LIS3DH_WHO_AM_I        0x0f
#define LIS3DH_TEMP_CFG_REG    0x1f
#define LIS3DH_CTRL_REG1       0x20
#define LIS3DH_CTRL_REG2       0x21
#define LIS3DH_CTRL_REG3       0x22
#define LIS3DH_CTRL_REG4       0x23
#define LIS3DH_CTRL_REG5       0x24
#define LIS3DH_CTRL_REG6       0x25
#define LIS3DH_REFERENCE       0x26
#define LIS3DH_STATUS_REG2     0x27
#define LIS3DH_OUT_X_H         0x29
#define LIS3DH_OUT_Y_H         0x2b
#define LIS3DH_OUT_Z_H         0x2d
#define LIS3DH_FIFO_CTRL_REG   0x2e
#define LIS3DH_FIFO_SRC_REG    0x2f
#define LIS3DH_INT1_CFG        0x30
#define LIS3DH_INT1_SOURCE     0x31
#define LIS3DH_INT1_THS        0x32
#define LIS3DH_INT1_DURATION   0x33
#define LIS3DH_CLICK_CFG       0x38
#define LIS3DH_CLICK_SRC       0x39
#define LIS3DH_CLICK_THS       0x3a
#define LIS3DH_TIME_LIMIT      0x3b
#define LIS3DH_TIME_LATENCY    0x3c
#define LIS3DH_TIME_WINDOW     0x3d

// definition for Nomalization
#define LIS3DH_SENSITIVITY_2G  (0.001F)
#define LIS3DH_SENSITIVITY_4G  (0.002F)
#define LIS3DH_SENSITIVITY_8G  (0.004F)
#define LIS3DH_SENSITIVITY_16G (0.012F)


#define GRAVITY (9.80665F)

void main_thread(){
    char dbf[2],addr,data[6];
    float dt[3],acc[2][3],a,b,c,d;
    int xx=0;
    addr = WRITE_ADDR;
    dbf[0] = LIS3DH_WHO_AM_I;
    i2c.write(addr, dbf, 1);
    i2c.read(addr | 1, dbf, 1);
    led2=1;
    if(dbf[0] == I_AM_LIS3DH) {
       
        //
        while(1){
        for(int i=0; i<12;i++) {
            
            dbf[0] = LIS3DH_CTRL_REG1;
            dbf[1] = 0x27; //ORIGINAL 0x7f
            i2c.write(addr , dbf , 2);
//======================================================//
            dbf[0] = LIS3DH_OUT_X_H | 0x80;
            //dbf[1] = 0xff; 
            i2c.write(addr, dbf, 1);
            
            dbf[0] = LIS3DH_OUT_Y_H | 0x80;
            i2c.write(addr, dbf, 1);
            
            dbf[0] = LIS3DH_OUT_Z_H | 0x80;
            i2c.write(addr, dbf, 1);
            
            i2c.read(addr | 1, data, 6);
            dt[0] = float(short((data[1]<<8) | data[0])) *LIS3DH_SENSITIVITY_16G  / 15 * GRAVITY;
            dt[1] = float(short((data[3]<<8) | data[2])) *LIS3DH_SENSITIVITY_16G  / 15 * GRAVITY;
            dt[2] = float(short((data[5]<<8) | data[4])) *LIS3DH_SENSITIVITY_16G  / 15 * GRAVITY;
            
            acc[xx][0] = dt[0];
            acc[xx][1] = dt[1];
            acc[xx][2] = dt[2];
            if (xx == 0){
                xx=1;
                }
            else{
                xx =0;
                }
            a = (acc[1][0]-acc[0][0])*(acc[1][0]-acc[0][0]);
            b = (acc[1][1]-acc[0][1])*(acc[1][1]-acc[0][1]);
            c = (acc[1][2]-acc[0][2])*(acc[1][2]-acc[0][2]);
            d = sqrt(a+b+c);
            wait(5);
            //usb_serial.printf("x -> %f y -> %f z -> %f\r\n",dt[0],dt[1],dt[2]);
            usb_serial.printf("Acelaration -> %f\r\n",d);
            
            if (d < 0.5){
                Acel_value++;
                }
            else{
                Acel_value = 0;
                
                }
                
            if (Acel_value == 4){
                    while(1){
                    led2=0;
                    wait(0.5);
                    led2 = 1;
                    }
                }
            
            led = 0;
            wait(0.5);
            led = 1;
            wait(5);
            
            usb_serial.printf("Temperature -> %f\r\n",sht31a.readTempC());
            if (sht31a.readTempC() > 35){
                while(1){
                    led2=0;
                    wait(0.5);
                    led2 = 1;
                    }
                }
            
            led = 0;
            wait(0.5);
            led = 1;


        }
    }
   } 
    
    }



int main() {
    
  thread.start(main_thread);   
    
}