Library for AE-KXSD9(3 axis accelerometer Module KXSD9-2050)

Dependents:   BLE_Acceleration_Statejudging

Fork of AE_KXSD9 by 尚人 永井

Revision:
2:fd07558fbebb
Parent:
1:4dc1a0ac0cf1
--- a/AE_KXSD9.cpp	Fri May 16 14:17:37 2014 +0000
+++ b/AE_KXSD9.cpp	Thu May 22 13:53:53 2014 +0000
@@ -19,22 +19,37 @@
 //initialization(default setting)
 void AE_KXSD9::init()
 {
-    char cmd_c=0xE1;//Reset Value
-    char cmd_b=0x40;//Reset Value
-    i2c_k.write(CTRL_REGC, &cmd_c, 1);
-    i2c_k.write(CTRL_REGB, &cmd_b, 1);
+    i2c_k.start();
+    i2c_k.write(addr_w);
+    i2c_k.write(0x0C);//register address:CTRL_REGC
+    i2c_k.write(0xE1);//data:Reset Value
+    i2c_k.stop();
+    i2c_k.start();
+    i2c_k.write(addr_w);
+    i2c_k.write(0x0D);//register address:CTRL_REGB
+    i2c_k.write(0x40);//data:Reset Value
+    i2c_k.stop();
 }
 
+
 //read each axial acceleration(unit:g)
 void AE_KXSD9::read_xyz(double *x, double *y, double *z)
 {
     const char addr_x_h = XOUT_H;
     char data[6] = {};
     short int acc[3]={};
-    i2c_k.write(addr_w, &addr_x_h, 1);
-    wait_us(500);
-    i2c_k.read(addr_r, data, 6);
-    for(int i=0;i<6;i+=2)acc[i/2]=((short int)data[i] << 4) + (short int)data[i+1] - 2048;
+    
+    i2c_k.start();
+    i2c_k.write(addr_w);
+    i2c_k.write(addr_x_h);
+    wait_us(200);
+    i2c_k.start();
+    i2c_k.write(addr_r);
+    for(int i=0;i<5;i++)data[i]=i2c_k.read(1);//acknowledge(ACK)
+    data[5]=i2c_k.read(0);//not acknowledge(NACK)
+    i2c_k.stop();
+    
+    for(int i=0;i<6;i+=2)acc[i/2]=((short int)data[i] << 4) + ((short int)data[i] >> 4) - OFFSET;
     
     *x = ((double)acc[0])/SENSITIVITY;
     *y = ((double)acc[1])/SENSITIVITY;
@@ -48,10 +63,16 @@
     const char addr_x_h = XOUT_H;
     char data[2] = {};
     short int acc;
-    i2c_k.write(addr_w, &addr_x_h, 1); 
-    wait_us(500);
-    i2c_k.read(addr_r, data, 2);
-    acc=((short int)data[0] << 4) + (short int)data[1] - 2048;
+    i2c_k.start();
+    i2c_k.write(addr_w);
+    i2c_k.write(addr_x_h);
+    wait_us(200);
+    i2c_k.start();
+    i2c_k.write(addr_r);
+    data[0]=i2c_k.read(1);//acknowledge(ACK)
+    data[1]=i2c_k.read(0);//not acknowledge(NACK)
+    i2c_k.stop();
+    acc=((short int)data[0] << 4) + ((short int)data[1] >> 4) - OFFSET;
     return (double)acc/SENSITIVITY;  
 }
 
@@ -62,10 +83,16 @@
     const char addr_y_h = YOUT_H;
     char data[2] = {};
     short int acc;
-    i2c_k.write(addr_w, &addr_y_h, 1);
-    wait_us(500);
-    i2c_k.read(addr_r, data, 2);
-    acc=((short int)data[0] << 4) + (short int)data[1] - 2048;
+    i2c_k.start();
+    i2c_k.write(addr_w);
+    i2c_k.write(addr_y_h);
+    wait_us(200);
+    i2c_k.start();
+    i2c_k.write(addr_r);
+    data[0]=i2c_k.read(1);//acknowledge(ACK)
+    data[1]=i2c_k.read(0);//not acknowledge(NACK)
+    i2c_k.stop();
+    acc=((short int)data[0] << 4) + ((short int)data[1] >> 4) - OFFSET;
     return (double)acc/SENSITIVITY;  
 }
 
@@ -77,25 +104,41 @@
     const char addr_z_h = ZOUT_H;
     char data[2] = {0,0};
     short int acc;
-    i2c_k.write(addr_w, &addr_z_h, 1);
-    wait_us(500);
-    i2c_k.read(addr_r, data, 2);
-    acc=((short int)data[0] << 4) + (short int)data[1] - 2048;
+    i2c_k.start();
+    i2c_k.write(addr_w);
+    i2c_k.write(addr_z_h);
+    wait_us(200);
+    i2c_k.start();
+    i2c_k.write(addr_r);
+    data[0]=i2c_k.read(1);//acknowledge(ACK)
+    data[1]=i2c_k.read(0);//not acknowledge(NACK)
+    i2c_k.stop();
+    acc=((short int)data[0] << 4) + ((short int)data[1] >> 4) - OFFSET;
     return (double)acc/SENSITIVITY;  
 }
 
-/*
-//read from AE_KXSD9 register
+
+//read register
 char AE_KXSD9::read_reg(char addr)
 {
-    
+    char data;
+    i2c_k.start();
+    i2c_k.write(addr_w);
+    i2c_k.write(addr);
+    i2c_k.start();
+    i2c_k.write(addr_r);
+    data=i2c_k.read(0);//not acknowledge
+    i2c_k.stop();
+    return data;
 }
-*/
+
 
 //write register
-/*
 void AE_KXSD9::write_reg(char addr, char data)
 {
-               
+    i2c_k.start();
+    i2c_k.write(addr_w);
+    i2c_k.write(addr);
+    i2c_k.write(data);
+    i2c_k.stop();
 }
-*/
\ No newline at end of file