.

Dependencies:   SHT3XA mbed LIS3DH mbed-rtos USBDevice

Committer:
diogo966
Date:
Sun Dec 16 11:21:09 2018 +0000
Revision:
1:323175fe9443
Parent:
0:941291e23892
.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bcostm 0:941291e23892 1 #include "mbed.h"
bcostm 0:941291e23892 2 #include "USBSerial.h"
diogo966 1:323175fe9443 3 #include "stdio.h"
diogo966 1:323175fe9443 4 #include "stdlib.h"
diogo966 1:323175fe9443 5 #include "math.h"
diogo966 1:323175fe9443 6 #include "SHT3XA.h"
diogo966 1:323175fe9443 7 #include "rtos.h"
bcostm 0:941291e23892 8
diogo966 1:323175fe9443 9 I2C i2c(PB_9,PB_8);
diogo966 1:323175fe9443 10 SHT3XA sht31a(PA_4);
diogo966 1:323175fe9443 11 int Acel_Buffer[4];
diogo966 1:323175fe9443 12 float Acel_value=0;
diogo966 1:323175fe9443 13 int ddx = 1;
diogo966 1:323175fe9443 14 char ccc;
diogo966 1:323175fe9443 15
bcostm 0:941291e23892 16 USBSerial usb_serial;
diogo966 1:323175fe9443 17 DigitalOut led(LED3);
diogo966 1:323175fe9443 18 DigitalOut led2(LED4);
diogo966 1:323175fe9443 19
diogo966 1:323175fe9443 20 Thread thread;
diogo966 1:323175fe9443 21
diogo966 1:323175fe9443 22 //GPS_Coordenates[80];
diogo966 1:323175fe9443 23 // addr
diogo966 1:323175fe9443 24 #define WRITE_ADDR 0x52
diogo966 1:323175fe9443 25 #define READ_ADDR 0x53
diogo966 1:323175fe9443 26 // LIS3DH ID
diogo966 1:323175fe9443 27 #define I_AM_LIS3DH 0x33
bcostm 0:941291e23892 28
diogo966 1:323175fe9443 29 // Register's definition
diogo966 1:323175fe9443 30 #define LIS3DH_STATUS_REG_AUX 0x07
diogo966 1:323175fe9443 31 #define LIS3DH_OUT_ADC1_L 0x08
diogo966 1:323175fe9443 32 #define LIS3DH_OUT_ADC1_H 0x09
diogo966 1:323175fe9443 33 #define LIS3DH_OUT_ADC2_L 0x0a
diogo966 1:323175fe9443 34 #define LIS3DH_OUT_ADC2_H 0x0b
diogo966 1:323175fe9443 35 #define LIS3DH_OUT_ADC3_L 0x0c
diogo966 1:323175fe9443 36 #define LIS3DH_OUT_ADC3_H 0x0d
diogo966 1:323175fe9443 37 #define LIS3DH_INT_COUNTER_REG 0x0e
diogo966 1:323175fe9443 38 #define LIS3DH_WHO_AM_I 0x0f
diogo966 1:323175fe9443 39 #define LIS3DH_TEMP_CFG_REG 0x1f
diogo966 1:323175fe9443 40 #define LIS3DH_CTRL_REG1 0x20
diogo966 1:323175fe9443 41 #define LIS3DH_CTRL_REG2 0x21
diogo966 1:323175fe9443 42 #define LIS3DH_CTRL_REG3 0x22
diogo966 1:323175fe9443 43 #define LIS3DH_CTRL_REG4 0x23
diogo966 1:323175fe9443 44 #define LIS3DH_CTRL_REG5 0x24
diogo966 1:323175fe9443 45 #define LIS3DH_CTRL_REG6 0x25
diogo966 1:323175fe9443 46 #define LIS3DH_REFERENCE 0x26
diogo966 1:323175fe9443 47 #define LIS3DH_STATUS_REG2 0x27
diogo966 1:323175fe9443 48 #define LIS3DH_OUT_X_H 0x29
diogo966 1:323175fe9443 49 #define LIS3DH_OUT_Y_H 0x2b
diogo966 1:323175fe9443 50 #define LIS3DH_OUT_Z_H 0x2d
diogo966 1:323175fe9443 51 #define LIS3DH_FIFO_CTRL_REG 0x2e
diogo966 1:323175fe9443 52 #define LIS3DH_FIFO_SRC_REG 0x2f
diogo966 1:323175fe9443 53 #define LIS3DH_INT1_CFG 0x30
diogo966 1:323175fe9443 54 #define LIS3DH_INT1_SOURCE 0x31
diogo966 1:323175fe9443 55 #define LIS3DH_INT1_THS 0x32
diogo966 1:323175fe9443 56 #define LIS3DH_INT1_DURATION 0x33
diogo966 1:323175fe9443 57 #define LIS3DH_CLICK_CFG 0x38
diogo966 1:323175fe9443 58 #define LIS3DH_CLICK_SRC 0x39
diogo966 1:323175fe9443 59 #define LIS3DH_CLICK_THS 0x3a
diogo966 1:323175fe9443 60 #define LIS3DH_TIME_LIMIT 0x3b
diogo966 1:323175fe9443 61 #define LIS3DH_TIME_LATENCY 0x3c
diogo966 1:323175fe9443 62 #define LIS3DH_TIME_WINDOW 0x3d
bcostm 0:941291e23892 63
diogo966 1:323175fe9443 64 // definition for Nomalization
diogo966 1:323175fe9443 65 #define LIS3DH_SENSITIVITY_2G (0.001F)
diogo966 1:323175fe9443 66 #define LIS3DH_SENSITIVITY_4G (0.002F)
diogo966 1:323175fe9443 67 #define LIS3DH_SENSITIVITY_8G (0.004F)
diogo966 1:323175fe9443 68 #define LIS3DH_SENSITIVITY_16G (0.012F)
diogo966 1:323175fe9443 69
diogo966 1:323175fe9443 70
diogo966 1:323175fe9443 71 #define GRAVITY (9.80665F)
bcostm 0:941291e23892 72
diogo966 1:323175fe9443 73 void main_thread(){
diogo966 1:323175fe9443 74 char dbf[2],addr,data[6];
diogo966 1:323175fe9443 75 float dt[3],acc[2][3],a,b,c,d;
diogo966 1:323175fe9443 76 int xx=0;
diogo966 1:323175fe9443 77 addr = WRITE_ADDR;
diogo966 1:323175fe9443 78 dbf[0] = LIS3DH_WHO_AM_I;
diogo966 1:323175fe9443 79 i2c.write(addr, dbf, 1);
diogo966 1:323175fe9443 80 i2c.read(addr | 1, dbf, 1);
diogo966 1:323175fe9443 81 led2=1;
diogo966 1:323175fe9443 82 if(dbf[0] == I_AM_LIS3DH) {
diogo966 1:323175fe9443 83
diogo966 1:323175fe9443 84 //
diogo966 1:323175fe9443 85 while(1){
diogo966 1:323175fe9443 86 for(int i=0; i<12;i++) {
diogo966 1:323175fe9443 87
diogo966 1:323175fe9443 88 dbf[0] = LIS3DH_CTRL_REG1;
diogo966 1:323175fe9443 89 dbf[1] = 0x27; //ORIGINAL 0x7f
diogo966 1:323175fe9443 90 i2c.write(addr , dbf , 2);
diogo966 1:323175fe9443 91 //======================================================//
diogo966 1:323175fe9443 92 dbf[0] = LIS3DH_OUT_X_H | 0x80;
diogo966 1:323175fe9443 93 //dbf[1] = 0xff;
diogo966 1:323175fe9443 94 i2c.write(addr, dbf, 1);
diogo966 1:323175fe9443 95
diogo966 1:323175fe9443 96 dbf[0] = LIS3DH_OUT_Y_H | 0x80;
diogo966 1:323175fe9443 97 i2c.write(addr, dbf, 1);
diogo966 1:323175fe9443 98
diogo966 1:323175fe9443 99 dbf[0] = LIS3DH_OUT_Z_H | 0x80;
diogo966 1:323175fe9443 100 i2c.write(addr, dbf, 1);
diogo966 1:323175fe9443 101
diogo966 1:323175fe9443 102 i2c.read(addr | 1, data, 6);
diogo966 1:323175fe9443 103 dt[0] = float(short((data[1]<<8) | data[0])) *LIS3DH_SENSITIVITY_16G / 15 * GRAVITY;
diogo966 1:323175fe9443 104 dt[1] = float(short((data[3]<<8) | data[2])) *LIS3DH_SENSITIVITY_16G / 15 * GRAVITY;
diogo966 1:323175fe9443 105 dt[2] = float(short((data[5]<<8) | data[4])) *LIS3DH_SENSITIVITY_16G / 15 * GRAVITY;
diogo966 1:323175fe9443 106
diogo966 1:323175fe9443 107 acc[xx][0] = dt[0];
diogo966 1:323175fe9443 108 acc[xx][1] = dt[1];
diogo966 1:323175fe9443 109 acc[xx][2] = dt[2];
diogo966 1:323175fe9443 110 if (xx == 0){
diogo966 1:323175fe9443 111 xx=1;
diogo966 1:323175fe9443 112 }
diogo966 1:323175fe9443 113 else{
diogo966 1:323175fe9443 114 xx =0;
diogo966 1:323175fe9443 115 }
diogo966 1:323175fe9443 116 a = (acc[1][0]-acc[0][0])*(acc[1][0]-acc[0][0]);
diogo966 1:323175fe9443 117 b = (acc[1][1]-acc[0][1])*(acc[1][1]-acc[0][1]);
diogo966 1:323175fe9443 118 c = (acc[1][2]-acc[0][2])*(acc[1][2]-acc[0][2]);
diogo966 1:323175fe9443 119 d = sqrt(a+b+c);
diogo966 1:323175fe9443 120 wait(5);
diogo966 1:323175fe9443 121 //usb_serial.printf("x -> %f y -> %f z -> %f\r\n",dt[0],dt[1],dt[2]);
diogo966 1:323175fe9443 122 usb_serial.printf("Acelaration -> %f\r\n",d);
diogo966 1:323175fe9443 123
diogo966 1:323175fe9443 124 if (d < 0.5){
diogo966 1:323175fe9443 125 Acel_value++;
diogo966 1:323175fe9443 126 }
diogo966 1:323175fe9443 127 else{
diogo966 1:323175fe9443 128 Acel_value = 0;
diogo966 1:323175fe9443 129
diogo966 1:323175fe9443 130 }
diogo966 1:323175fe9443 131
diogo966 1:323175fe9443 132 if (Acel_value == 4){
diogo966 1:323175fe9443 133 while(1){
diogo966 1:323175fe9443 134 led2=0;
diogo966 1:323175fe9443 135 wait(0.5);
diogo966 1:323175fe9443 136 led2 = 1;
diogo966 1:323175fe9443 137 }
diogo966 1:323175fe9443 138 }
diogo966 1:323175fe9443 139
diogo966 1:323175fe9443 140 led = 0;
diogo966 1:323175fe9443 141 wait(0.5);
diogo966 1:323175fe9443 142 led = 1;
diogo966 1:323175fe9443 143 wait(5);
diogo966 1:323175fe9443 144
diogo966 1:323175fe9443 145 usb_serial.printf("Temperature -> %f\r\n",sht31a.readTempC());
diogo966 1:323175fe9443 146 if (sht31a.readTempC() > 35){
diogo966 1:323175fe9443 147 while(1){
diogo966 1:323175fe9443 148 led2=0;
diogo966 1:323175fe9443 149 wait(0.5);
diogo966 1:323175fe9443 150 led2 = 1;
diogo966 1:323175fe9443 151 }
diogo966 1:323175fe9443 152 }
diogo966 1:323175fe9443 153
diogo966 1:323175fe9443 154 led = 0;
diogo966 1:323175fe9443 155 wait(0.5);
diogo966 1:323175fe9443 156 led = 1;
bcostm 0:941291e23892 157
diogo966 1:323175fe9443 158
diogo966 1:323175fe9443 159 }
diogo966 1:323175fe9443 160 }
diogo966 1:323175fe9443 161 }
diogo966 1:323175fe9443 162
diogo966 1:323175fe9443 163 }
bcostm 0:941291e23892 164
diogo966 1:323175fe9443 165
diogo966 1:323175fe9443 166
diogo966 1:323175fe9443 167 int main() {
diogo966 1:323175fe9443 168
diogo966 1:323175fe9443 169 thread.start(main_thread);
diogo966 1:323175fe9443 170
bcostm 0:941291e23892 171 }