ほぼ関数かしたLIS3DH

Dependencies:   mbed

Revision:
0:8c85bd2e8177
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LIS3DHnew.cpp	Mon Feb 16 11:10:28 2015 +0000
@@ -0,0 +1,96 @@
+#include "mbed.h"
+ 
+I2C i2c(p9,p10);//sda,scl
+Serial pc(USBTX,USBRX);
+//DigitalOut led(LED1);
+// addr
+#define WRITE_ADDR 0x30
+#define READ_ADDR 0x31
+//   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_L         0x28
+#define LIS3DH_OUT_X_H         0x29
+#define LIS3DH_OUT_Y_L         0x2a
+#define LIS3DH_OUT_Y_H         0x2b
+#define LIS3DH_OUT_Z_L         0x2c
+#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)
+char dbf[2],addr;
+int check;
+float dt[3];
+
+int che(void);
+int cot(void);   
+int main(){
+    int check;
+    check = che();
+    if (check == 1) {
+        while(1) {
+            cot();
+            wait(1);
+            }
+        }
+    }
+int che(void){
+            addr = WRITE_ADDR;
+            dbf[0] = LIS3DH_WHO_AM_I;
+            i2c.write(addr, dbf,1);
+            i2c.read(addr | 1, dbf, 1);
+            if  (dbf[0] == I_AM_LIS3DH) {
+                return 1;
+            }
+            else {
+                return 0;
+            }
+}
+int cot(void) {
+            char data[6];
+            dbf[0] = LIS3DH_CTRL_REG1;
+            dbf[1] = 0x7f;
+            i2c.write(addr , dbf , 2);         
+            dbf[0] = LIS3DH_OUT_X_L | 0x80;
+            i2c.write(addr, dbf, 1);
+            i2c.read(addr | 1, data, 6);
+            dt[0] = float(short((data[1]<<8) | data[0])) *LIS3DH_SENSITIVITY_2G  / 15;
+            dt[1] = float(short((data[3]<<8) | data[2])) *LIS3DH_SENSITIVITY_2G  / 15;
+            dt[2] = float(short((data[5]<<8) | data[4])) *LIS3DH_SENSITIVITY_2G  / 15;
+            pc.printf("X=%f __Y=%f __Z=%f \n",dt[0],dt[1],dt[2]);
+            return 0;
+        }
\ No newline at end of file