.
Dependencies: SHT3XA mbed LIS3DH mbed-rtos USBDevice
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 }
Generated on Mon Jul 18 2022 03:18:21 by 1.7.2