.

Dependencies:   SHT3XA mbed LIS3DH mbed-rtos USBDevice

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "USBSerial.h"
00003 #include "stdio.h"
00004 #include "stdlib.h"
00005 #include "math.h"
00006 #include "SHT3XA.h"
00007 #include "rtos.h"
00008 
00009 I2C i2c(PB_9,PB_8);
00010 SHT3XA sht31a(PA_4);
00011 int Acel_Buffer[4];
00012 float Acel_value=0;
00013 int ddx = 1;
00014 char ccc;
00015 
00016 USBSerial usb_serial;
00017 DigitalOut led(LED3);
00018 DigitalOut led2(LED4);
00019 
00020 Thread thread;
00021 
00022 //GPS_Coordenates[80];
00023 // addr
00024 #define WRITE_ADDR 0x52
00025 #define READ_ADDR 0x53
00026 //   LIS3DH ID
00027 #define I_AM_LIS3DH         0x33
00028 
00029 //  Register's definition
00030 #define LIS3DH_STATUS_REG_AUX  0x07
00031 #define LIS3DH_OUT_ADC1_L      0x08
00032 #define LIS3DH_OUT_ADC1_H      0x09
00033 #define LIS3DH_OUT_ADC2_L      0x0a
00034 #define LIS3DH_OUT_ADC2_H      0x0b
00035 #define LIS3DH_OUT_ADC3_L      0x0c
00036 #define LIS3DH_OUT_ADC3_H      0x0d
00037 #define LIS3DH_INT_COUNTER_REG 0x0e
00038 #define LIS3DH_WHO_AM_I        0x0f
00039 #define LIS3DH_TEMP_CFG_REG    0x1f
00040 #define LIS3DH_CTRL_REG1       0x20
00041 #define LIS3DH_CTRL_REG2       0x21
00042 #define LIS3DH_CTRL_REG3       0x22
00043 #define LIS3DH_CTRL_REG4       0x23
00044 #define LIS3DH_CTRL_REG5       0x24
00045 #define LIS3DH_CTRL_REG6       0x25
00046 #define LIS3DH_REFERENCE       0x26
00047 #define LIS3DH_STATUS_REG2     0x27
00048 #define LIS3DH_OUT_X_H         0x29
00049 #define LIS3DH_OUT_Y_H         0x2b
00050 #define LIS3DH_OUT_Z_H         0x2d
00051 #define LIS3DH_FIFO_CTRL_REG   0x2e
00052 #define LIS3DH_FIFO_SRC_REG    0x2f
00053 #define LIS3DH_INT1_CFG        0x30
00054 #define LIS3DH_INT1_SOURCE     0x31
00055 #define LIS3DH_INT1_THS        0x32
00056 #define LIS3DH_INT1_DURATION   0x33
00057 #define LIS3DH_CLICK_CFG       0x38
00058 #define LIS3DH_CLICK_SRC       0x39
00059 #define LIS3DH_CLICK_THS       0x3a
00060 #define LIS3DH_TIME_LIMIT      0x3b
00061 #define LIS3DH_TIME_LATENCY    0x3c
00062 #define LIS3DH_TIME_WINDOW     0x3d
00063 
00064 // definition for Nomalization
00065 #define LIS3DH_SENSITIVITY_2G  (0.001F)
00066 #define LIS3DH_SENSITIVITY_4G  (0.002F)
00067 #define LIS3DH_SENSITIVITY_8G  (0.004F)
00068 #define LIS3DH_SENSITIVITY_16G (0.012F)
00069 
00070 
00071 #define GRAVITY (9.80665F)
00072 
00073 void main_thread(){
00074     char dbf[2],addr,data[6];
00075     float dt[3],acc[2][3],a,b,c,d;
00076     int xx=0;
00077     addr = WRITE_ADDR;
00078     dbf[0] = LIS3DH_WHO_AM_I;
00079     i2c.write(addr, dbf, 1);
00080     i2c.read(addr | 1, dbf, 1);
00081     led2=1;
00082     if(dbf[0] == I_AM_LIS3DH) {
00083        
00084         //
00085         while(1){
00086         for(int i=0; i<12;i++) {
00087             
00088             dbf[0] = LIS3DH_CTRL_REG1;
00089             dbf[1] = 0x27; //ORIGINAL 0x7f
00090             i2c.write(addr , dbf , 2);
00091 //======================================================//
00092             dbf[0] = LIS3DH_OUT_X_H | 0x80;
00093             //dbf[1] = 0xff; 
00094             i2c.write(addr, dbf, 1);
00095             
00096             dbf[0] = LIS3DH_OUT_Y_H | 0x80;
00097             i2c.write(addr, dbf, 1);
00098             
00099             dbf[0] = LIS3DH_OUT_Z_H | 0x80;
00100             i2c.write(addr, dbf, 1);
00101             
00102             i2c.read(addr | 1, data, 6);
00103             dt[0] = float(short((data[1]<<8) | data[0])) *LIS3DH_SENSITIVITY_16G  / 15 * GRAVITY;
00104             dt[1] = float(short((data[3]<<8) | data[2])) *LIS3DH_SENSITIVITY_16G  / 15 * GRAVITY;
00105             dt[2] = float(short((data[5]<<8) | data[4])) *LIS3DH_SENSITIVITY_16G  / 15 * GRAVITY;
00106             
00107             acc[xx][0] = dt[0];
00108             acc[xx][1] = dt[1];
00109             acc[xx][2] = dt[2];
00110             if (xx == 0){
00111                 xx=1;
00112                 }
00113             else{
00114                 xx =0;
00115                 }
00116             a = (acc[1][0]-acc[0][0])*(acc[1][0]-acc[0][0]);
00117             b = (acc[1][1]-acc[0][1])*(acc[1][1]-acc[0][1]);
00118             c = (acc[1][2]-acc[0][2])*(acc[1][2]-acc[0][2]);
00119             d = sqrt(a+b+c);
00120             wait(5);
00121             //usb_serial.printf("x -> %f y -> %f z -> %f\r\n",dt[0],dt[1],dt[2]);
00122             usb_serial.printf("Acelaration -> %f\r\n",d);
00123             
00124             if (d < 0.5){
00125                 Acel_value++;
00126                 }
00127             else{
00128                 Acel_value = 0;
00129                 
00130                 }
00131                 
00132             if (Acel_value == 4){
00133                     while(1){
00134                     led2=0;
00135                     wait(0.5);
00136                     led2 = 1;
00137                     }
00138                 }
00139             
00140             led = 0;
00141             wait(0.5);
00142             led = 1;
00143             wait(5);
00144             
00145             usb_serial.printf("Temperature -> %f\r\n",sht31a.readTempC());
00146             if (sht31a.readTempC() > 35){
00147                 while(1){
00148                     led2=0;
00149                     wait(0.5);
00150                     led2 = 1;
00151                     }
00152                 }
00153             
00154             led = 0;
00155             wait(0.5);
00156             led = 1;
00157 
00158 
00159         }
00160     }
00161    } 
00162     
00163     }
00164 
00165 
00166 
00167 int main() {
00168     
00169   thread.start(main_thread);   
00170     
00171 }