Library for AE-KXSD9(3 axis accelerometer Module KXSD9-2050)
Dependents: BLE_Acceleration_Statejudging
Fork of AE_KXSD9 by
AE_KXSD9.cpp@2:fd07558fbebb, 2014-05-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |