Library for AE-KXSD9(3 axis accelerometer Module KXSD9-2050)
Dependents: BLE_Acceleration_Statejudging
Fork of AE_KXSD9 by
Diff: AE_KXSD9.cpp
- 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