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

Dependents:   BLE_Acceleration_Statejudging

Fork of AE_KXSD9 by 尚人 永井

Committer:
Naoto_111
Date:
Thu May 22 13:53:53 2014 +0000
Revision:
2:fd07558fbebb
Parent:
1:4dc1a0ac0cf1
rewrite overall; read_reg and write_reg are implemented

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Naoto_111 1:4dc1a0ac0cf1 1 #include "AE_KXSD9.h"
Naoto_111 1:4dc1a0ac0cf1 2
Naoto_111 1:4dc1a0ac0cf1 3 //constructor
Naoto_111 1:4dc1a0ac0cf1 4 AE_KXSD9::AE_KXSD9(PinName sda, PinName scl, int addr1, int addr2)
Naoto_111 1:4dc1a0ac0cf1 5 :i2c_k(sda, scl),
Naoto_111 1:4dc1a0ac0cf1 6 addr_w(addr1),
Naoto_111 1:4dc1a0ac0cf1 7 addr_r(addr2)
Naoto_111 1:4dc1a0ac0cf1 8 {};
Naoto_111 1:4dc1a0ac0cf1 9
Naoto_111 1:4dc1a0ac0cf1 10
Naoto_111 1:4dc1a0ac0cf1 11 //destructor
Naoto_111 1:4dc1a0ac0cf1 12 /*
Naoto_111 1:4dc1a0ac0cf1 13 AE_KXSD9::~AE_KXSD9()
Naoto_111 1:4dc1a0ac0cf1 14 {
Naoto_111 1:4dc1a0ac0cf1 15
Naoto_111 1:4dc1a0ac0cf1 16 }
Naoto_111 1:4dc1a0ac0cf1 17 */
Naoto_111 1:4dc1a0ac0cf1 18
Naoto_111 1:4dc1a0ac0cf1 19 //initialization(default setting)
Naoto_111 1:4dc1a0ac0cf1 20 void AE_KXSD9::init()
Naoto_111 1:4dc1a0ac0cf1 21 {
Naoto_111 2:fd07558fbebb 22 i2c_k.start();
Naoto_111 2:fd07558fbebb 23 i2c_k.write(addr_w);
Naoto_111 2:fd07558fbebb 24 i2c_k.write(0x0C);//register address:CTRL_REGC
Naoto_111 2:fd07558fbebb 25 i2c_k.write(0xE1);//data:Reset Value
Naoto_111 2:fd07558fbebb 26 i2c_k.stop();
Naoto_111 2:fd07558fbebb 27 i2c_k.start();
Naoto_111 2:fd07558fbebb 28 i2c_k.write(addr_w);
Naoto_111 2:fd07558fbebb 29 i2c_k.write(0x0D);//register address:CTRL_REGB
Naoto_111 2:fd07558fbebb 30 i2c_k.write(0x40);//data:Reset Value
Naoto_111 2:fd07558fbebb 31 i2c_k.stop();
Naoto_111 1:4dc1a0ac0cf1 32 }
Naoto_111 1:4dc1a0ac0cf1 33
Naoto_111 2:fd07558fbebb 34
Naoto_111 1:4dc1a0ac0cf1 35 //read each axial acceleration(unit:g)
Naoto_111 1:4dc1a0ac0cf1 36 void AE_KXSD9::read_xyz(double *x, double *y, double *z)
Naoto_111 1:4dc1a0ac0cf1 37 {
Naoto_111 1:4dc1a0ac0cf1 38 const char addr_x_h = XOUT_H;
Naoto_111 1:4dc1a0ac0cf1 39 char data[6] = {};
Naoto_111 1:4dc1a0ac0cf1 40 short int acc[3]={};
Naoto_111 2:fd07558fbebb 41
Naoto_111 2:fd07558fbebb 42 i2c_k.start();
Naoto_111 2:fd07558fbebb 43 i2c_k.write(addr_w);
Naoto_111 2:fd07558fbebb 44 i2c_k.write(addr_x_h);
Naoto_111 2:fd07558fbebb 45 wait_us(200);
Naoto_111 2:fd07558fbebb 46 i2c_k.start();
Naoto_111 2:fd07558fbebb 47 i2c_k.write(addr_r);
Naoto_111 2:fd07558fbebb 48 for(int i=0;i<5;i++)data[i]=i2c_k.read(1);//acknowledge(ACK)
Naoto_111 2:fd07558fbebb 49 data[5]=i2c_k.read(0);//not acknowledge(NACK)
Naoto_111 2:fd07558fbebb 50 i2c_k.stop();
Naoto_111 2:fd07558fbebb 51
Naoto_111 2:fd07558fbebb 52 for(int i=0;i<6;i+=2)acc[i/2]=((short int)data[i] << 4) + ((short int)data[i] >> 4) - OFFSET;
Naoto_111 1:4dc1a0ac0cf1 53
Naoto_111 1:4dc1a0ac0cf1 54 *x = ((double)acc[0])/SENSITIVITY;
Naoto_111 1:4dc1a0ac0cf1 55 *y = ((double)acc[1])/SENSITIVITY;
Naoto_111 1:4dc1a0ac0cf1 56 *z = ((double)acc[2])/SENSITIVITY;
Naoto_111 1:4dc1a0ac0cf1 57 }
Naoto_111 1:4dc1a0ac0cf1 58
Naoto_111 1:4dc1a0ac0cf1 59
Naoto_111 1:4dc1a0ac0cf1 60 //read the acceleration in x-axis(unit:g)
Naoto_111 1:4dc1a0ac0cf1 61 double AE_KXSD9::read_x()
Naoto_111 1:4dc1a0ac0cf1 62 {
Naoto_111 1:4dc1a0ac0cf1 63 const char addr_x_h = XOUT_H;
Naoto_111 1:4dc1a0ac0cf1 64 char data[2] = {};
Naoto_111 1:4dc1a0ac0cf1 65 short int acc;
Naoto_111 2:fd07558fbebb 66 i2c_k.start();
Naoto_111 2:fd07558fbebb 67 i2c_k.write(addr_w);
Naoto_111 2:fd07558fbebb 68 i2c_k.write(addr_x_h);
Naoto_111 2:fd07558fbebb 69 wait_us(200);
Naoto_111 2:fd07558fbebb 70 i2c_k.start();
Naoto_111 2:fd07558fbebb 71 i2c_k.write(addr_r);
Naoto_111 2:fd07558fbebb 72 data[0]=i2c_k.read(1);//acknowledge(ACK)
Naoto_111 2:fd07558fbebb 73 data[1]=i2c_k.read(0);//not acknowledge(NACK)
Naoto_111 2:fd07558fbebb 74 i2c_k.stop();
Naoto_111 2:fd07558fbebb 75 acc=((short int)data[0] << 4) + ((short int)data[1] >> 4) - OFFSET;
Naoto_111 1:4dc1a0ac0cf1 76 return (double)acc/SENSITIVITY;
Naoto_111 1:4dc1a0ac0cf1 77 }
Naoto_111 1:4dc1a0ac0cf1 78
Naoto_111 1:4dc1a0ac0cf1 79
Naoto_111 1:4dc1a0ac0cf1 80 //read the acceleration in y-axis(unit:g)
Naoto_111 1:4dc1a0ac0cf1 81 double AE_KXSD9::read_y()
Naoto_111 1:4dc1a0ac0cf1 82 {
Naoto_111 1:4dc1a0ac0cf1 83 const char addr_y_h = YOUT_H;
Naoto_111 1:4dc1a0ac0cf1 84 char data[2] = {};
Naoto_111 1:4dc1a0ac0cf1 85 short int acc;
Naoto_111 2:fd07558fbebb 86 i2c_k.start();
Naoto_111 2:fd07558fbebb 87 i2c_k.write(addr_w);
Naoto_111 2:fd07558fbebb 88 i2c_k.write(addr_y_h);
Naoto_111 2:fd07558fbebb 89 wait_us(200);
Naoto_111 2:fd07558fbebb 90 i2c_k.start();
Naoto_111 2:fd07558fbebb 91 i2c_k.write(addr_r);
Naoto_111 2:fd07558fbebb 92 data[0]=i2c_k.read(1);//acknowledge(ACK)
Naoto_111 2:fd07558fbebb 93 data[1]=i2c_k.read(0);//not acknowledge(NACK)
Naoto_111 2:fd07558fbebb 94 i2c_k.stop();
Naoto_111 2:fd07558fbebb 95 acc=((short int)data[0] << 4) + ((short int)data[1] >> 4) - OFFSET;
Naoto_111 1:4dc1a0ac0cf1 96 return (double)acc/SENSITIVITY;
Naoto_111 1:4dc1a0ac0cf1 97 }
Naoto_111 1:4dc1a0ac0cf1 98
Naoto_111 1:4dc1a0ac0cf1 99
Naoto_111 1:4dc1a0ac0cf1 100 //read the acceleration in z-axis(unit:g)
Naoto_111 1:4dc1a0ac0cf1 101 double AE_KXSD9::read_z()
Naoto_111 1:4dc1a0ac0cf1 102 {
Naoto_111 1:4dc1a0ac0cf1 103
Naoto_111 1:4dc1a0ac0cf1 104 const char addr_z_h = ZOUT_H;
Naoto_111 1:4dc1a0ac0cf1 105 char data[2] = {0,0};
Naoto_111 1:4dc1a0ac0cf1 106 short int acc;
Naoto_111 2:fd07558fbebb 107 i2c_k.start();
Naoto_111 2:fd07558fbebb 108 i2c_k.write(addr_w);
Naoto_111 2:fd07558fbebb 109 i2c_k.write(addr_z_h);
Naoto_111 2:fd07558fbebb 110 wait_us(200);
Naoto_111 2:fd07558fbebb 111 i2c_k.start();
Naoto_111 2:fd07558fbebb 112 i2c_k.write(addr_r);
Naoto_111 2:fd07558fbebb 113 data[0]=i2c_k.read(1);//acknowledge(ACK)
Naoto_111 2:fd07558fbebb 114 data[1]=i2c_k.read(0);//not acknowledge(NACK)
Naoto_111 2:fd07558fbebb 115 i2c_k.stop();
Naoto_111 2:fd07558fbebb 116 acc=((short int)data[0] << 4) + ((short int)data[1] >> 4) - OFFSET;
Naoto_111 1:4dc1a0ac0cf1 117 return (double)acc/SENSITIVITY;
Naoto_111 1:4dc1a0ac0cf1 118 }
Naoto_111 1:4dc1a0ac0cf1 119
Naoto_111 2:fd07558fbebb 120
Naoto_111 2:fd07558fbebb 121 //read register
Naoto_111 1:4dc1a0ac0cf1 122 char AE_KXSD9::read_reg(char addr)
Naoto_111 1:4dc1a0ac0cf1 123 {
Naoto_111 2:fd07558fbebb 124 char data;
Naoto_111 2:fd07558fbebb 125 i2c_k.start();
Naoto_111 2:fd07558fbebb 126 i2c_k.write(addr_w);
Naoto_111 2:fd07558fbebb 127 i2c_k.write(addr);
Naoto_111 2:fd07558fbebb 128 i2c_k.start();
Naoto_111 2:fd07558fbebb 129 i2c_k.write(addr_r);
Naoto_111 2:fd07558fbebb 130 data=i2c_k.read(0);//not acknowledge
Naoto_111 2:fd07558fbebb 131 i2c_k.stop();
Naoto_111 2:fd07558fbebb 132 return data;
Naoto_111 1:4dc1a0ac0cf1 133 }
Naoto_111 2:fd07558fbebb 134
Naoto_111 1:4dc1a0ac0cf1 135
Naoto_111 1:4dc1a0ac0cf1 136 //write register
Naoto_111 1:4dc1a0ac0cf1 137 void AE_KXSD9::write_reg(char addr, char data)
Naoto_111 1:4dc1a0ac0cf1 138 {
Naoto_111 2:fd07558fbebb 139 i2c_k.start();
Naoto_111 2:fd07558fbebb 140 i2c_k.write(addr_w);
Naoto_111 2:fd07558fbebb 141 i2c_k.write(addr);
Naoto_111 2:fd07558fbebb 142 i2c_k.write(data);
Naoto_111 2:fd07558fbebb 143 i2c_k.stop();
Naoto_111 1:4dc1a0ac0cf1 144 }