Battery

Dependencies:   mbed PowerControl SDFileSystem

Fork of HeptaBattery by 智也 大野

Committer:
tomoya123
Date:
Tue Dec 13 06:37:27 2016 +0000
Revision:
1:166ddf929155
Parent:
0:d53e9c6fc771
HeptaBattery

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tomoya123 0:d53e9c6fc771 1 #include "HeptaAccel.h"
tomoya123 0:d53e9c6fc771 2 #include "mbed.h"
tomoya123 0:d53e9c6fc771 3
tomoya123 0:d53e9c6fc771 4 HeptaAccel::HeptaAccel(PinName sda, PinName scl, int aaddr ) : accel(sda,scl),addr(aaddr)
tomoya123 0:d53e9c6fc771 5 {
tomoya123 0:d53e9c6fc771 6 _cmd[0] = 0x2A;//CTL_REG
tomoya123 0:d53e9c6fc771 7 _cmd[1] = 0x01;//ACTIVE
tomoya123 0:d53e9c6fc771 8 accel.write(addr, _cmd, 2);
tomoya123 0:d53e9c6fc771 9 accel.start();
tomoya123 0:d53e9c6fc771 10 accel.write(addr);
tomoya123 0:d53e9c6fc771 11 accel.stop();
tomoya123 0:d53e9c6fc771 12 }
tomoya123 0:d53e9c6fc771 13
tomoya123 0:d53e9c6fc771 14 void HeptaAccel::setup()
tomoya123 0:d53e9c6fc771 15 {
tomoya123 0:d53e9c6fc771 16 _cmd[0] = 0x2A;
tomoya123 0:d53e9c6fc771 17 _cmd[1] = 0x01;
tomoya123 0:d53e9c6fc771 18 accel.frequency(100000);
tomoya123 0:d53e9c6fc771 19 accel.write(addr, _cmd, 2);
tomoya123 0:d53e9c6fc771 20 accel.start();
tomoya123 0:d53e9c6fc771 21 accel.write(addr);
tomoya123 0:d53e9c6fc771 22 accel.stop();
tomoya123 0:d53e9c6fc771 23 }
tomoya123 0:d53e9c6fc771 24
tomoya123 0:d53e9c6fc771 25 void HeptaAccel::sensing(float *ax,float *ay,float *az)
tomoya123 0:d53e9c6fc771 26 {
tomoya123 0:d53e9c6fc771 27 int16_t acc;
tomoya123 0:d53e9c6fc771 28 accel.start();//start
tomoya123 0:d53e9c6fc771 29 accel.write(addr);//write address
tomoya123 0:d53e9c6fc771 30 accel.write(0x01);//X-axis_MSB_REG
tomoya123 0:d53e9c6fc771 31 accel.start();//restart, switch from write to read
tomoya123 0:d53e9c6fc771 32 accel.write(addr|0x01);//read address
tomoya123 0:d53e9c6fc771 33 _xmsb = accel.read(0);//read from selected register with NACK
tomoya123 0:d53e9c6fc771 34 accel.stop();
tomoya123 0:d53e9c6fc771 35 accel.start();
tomoya123 0:d53e9c6fc771 36 accel.write(addr);
tomoya123 0:d53e9c6fc771 37 accel.write(0x02);//X-axis_LSB_REG
tomoya123 0:d53e9c6fc771 38 accel.start();
tomoya123 0:d53e9c6fc771 39 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 40 _xlsb = accel.read(0);
tomoya123 0:d53e9c6fc771 41 accel.stop();
tomoya123 0:d53e9c6fc771 42 acc = (_xmsb << 6) | (_xlsb >> 2);
tomoya123 0:d53e9c6fc771 43 if (acc > UINT14_MAX/2)
tomoya123 0:d53e9c6fc771 44 {
tomoya123 0:d53e9c6fc771 45 acc -= UINT14_MAX;
tomoya123 0:d53e9c6fc771 46 }
tomoya123 0:d53e9c6fc771 47 *ax = acc/4096.0*9.81;
tomoya123 0:d53e9c6fc771 48
tomoya123 0:d53e9c6fc771 49 accel.start();
tomoya123 0:d53e9c6fc771 50 accel.write(addr);
tomoya123 0:d53e9c6fc771 51 accel.write(0x03);
tomoya123 0:d53e9c6fc771 52 accel.start();
tomoya123 0:d53e9c6fc771 53 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 54 _ymsb = accel.read(0);
tomoya123 0:d53e9c6fc771 55 accel.stop();
tomoya123 0:d53e9c6fc771 56 accel.start();
tomoya123 0:d53e9c6fc771 57 accel.write(addr);
tomoya123 0:d53e9c6fc771 58 accel.write(0x04);
tomoya123 0:d53e9c6fc771 59 accel.start();
tomoya123 0:d53e9c6fc771 60 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 61 _ylsb = accel.read(0);
tomoya123 0:d53e9c6fc771 62 accel.stop();
tomoya123 0:d53e9c6fc771 63 acc = (_ymsb << 6) | (_ylsb >> 2);
tomoya123 0:d53e9c6fc771 64 if (acc > UINT14_MAX/2)
tomoya123 0:d53e9c6fc771 65 {
tomoya123 0:d53e9c6fc771 66 acc -= UINT14_MAX;
tomoya123 0:d53e9c6fc771 67 }
tomoya123 0:d53e9c6fc771 68 *ay = acc/4096.0*9.81;
tomoya123 0:d53e9c6fc771 69
tomoya123 0:d53e9c6fc771 70 accel.start();
tomoya123 0:d53e9c6fc771 71 accel.write(addr);
tomoya123 0:d53e9c6fc771 72 accel.write(0x05);
tomoya123 0:d53e9c6fc771 73 accel.start();
tomoya123 0:d53e9c6fc771 74 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 75 _zmsb = accel.read(0);
tomoya123 0:d53e9c6fc771 76 accel.stop();
tomoya123 0:d53e9c6fc771 77 accel.start();
tomoya123 0:d53e9c6fc771 78 accel.write(addr);
tomoya123 0:d53e9c6fc771 79 accel.write(0x06);
tomoya123 0:d53e9c6fc771 80 accel.start();
tomoya123 0:d53e9c6fc771 81 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 82 _zlsb = accel.read(0);
tomoya123 0:d53e9c6fc771 83 accel.stop();
tomoya123 0:d53e9c6fc771 84 acc = (_zmsb << 6) | (_zlsb >> 2);
tomoya123 0:d53e9c6fc771 85 if (acc > UINT14_MAX/2)
tomoya123 0:d53e9c6fc771 86 {
tomoya123 0:d53e9c6fc771 87 acc -= UINT14_MAX;
tomoya123 0:d53e9c6fc771 88 }
tomoya123 0:d53e9c6fc771 89 *az = acc/4096.0*9.81;
tomoya123 0:d53e9c6fc771 90 }
tomoya123 0:d53e9c6fc771 91
tomoya123 0:d53e9c6fc771 92 float HeptaAccel::x()
tomoya123 0:d53e9c6fc771 93 {
tomoya123 0:d53e9c6fc771 94 int16_t acc;
tomoya123 0:d53e9c6fc771 95 float ax;
tomoya123 0:d53e9c6fc771 96 accel.start();
tomoya123 0:d53e9c6fc771 97 accel.write(addr);
tomoya123 0:d53e9c6fc771 98 accel.write(0x01);
tomoya123 0:d53e9c6fc771 99 accel.start();
tomoya123 0:d53e9c6fc771 100 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 101 _xmsb = accel.read(0);
tomoya123 0:d53e9c6fc771 102 accel.stop();
tomoya123 0:d53e9c6fc771 103 accel.start();
tomoya123 0:d53e9c6fc771 104 accel.write(addr);
tomoya123 0:d53e9c6fc771 105 accel.write(0x02);
tomoya123 0:d53e9c6fc771 106 accel.start();
tomoya123 0:d53e9c6fc771 107 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 108 _xlsb = accel.read(0);
tomoya123 0:d53e9c6fc771 109 accel.stop();
tomoya123 0:d53e9c6fc771 110 acc = (_xmsb << 6) | (_xlsb >> 2);
tomoya123 0:d53e9c6fc771 111 if (acc > UINT14_MAX/2)
tomoya123 0:d53e9c6fc771 112 {
tomoya123 0:d53e9c6fc771 113 acc -= UINT14_MAX;
tomoya123 0:d53e9c6fc771 114 }
tomoya123 0:d53e9c6fc771 115 ax = acc/4096.0*9.81;
tomoya123 0:d53e9c6fc771 116 return(ax);
tomoya123 0:d53e9c6fc771 117 }
tomoya123 0:d53e9c6fc771 118
tomoya123 0:d53e9c6fc771 119 float HeptaAccel::y()
tomoya123 0:d53e9c6fc771 120 {
tomoya123 0:d53e9c6fc771 121 int16_t acc;
tomoya123 0:d53e9c6fc771 122 float ay;
tomoya123 0:d53e9c6fc771 123 accel.start();
tomoya123 0:d53e9c6fc771 124 accel.write(addr);
tomoya123 0:d53e9c6fc771 125 accel.write(0x03);
tomoya123 0:d53e9c6fc771 126 accel.start();
tomoya123 0:d53e9c6fc771 127 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 128 _ymsb = accel.read(0);
tomoya123 0:d53e9c6fc771 129 accel.stop();
tomoya123 0:d53e9c6fc771 130 accel.start();
tomoya123 0:d53e9c6fc771 131 accel.write(addr);
tomoya123 0:d53e9c6fc771 132 accel.write(0x04);
tomoya123 0:d53e9c6fc771 133 accel.start();
tomoya123 0:d53e9c6fc771 134 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 135 _ylsb = accel.read(0);
tomoya123 0:d53e9c6fc771 136 accel.stop();
tomoya123 0:d53e9c6fc771 137 acc = (_ymsb << 6) | (_ylsb >> 2);
tomoya123 0:d53e9c6fc771 138 if (acc > UINT14_MAX/2)
tomoya123 0:d53e9c6fc771 139 {
tomoya123 0:d53e9c6fc771 140 acc -= UINT14_MAX;
tomoya123 0:d53e9c6fc771 141 }
tomoya123 0:d53e9c6fc771 142 ay = acc/4096.0*9.81;
tomoya123 0:d53e9c6fc771 143 return(ay);
tomoya123 0:d53e9c6fc771 144 }
tomoya123 0:d53e9c6fc771 145
tomoya123 0:d53e9c6fc771 146 float HeptaAccel::z()
tomoya123 0:d53e9c6fc771 147 {
tomoya123 0:d53e9c6fc771 148 int16_t acc;
tomoya123 0:d53e9c6fc771 149 float az;
tomoya123 0:d53e9c6fc771 150 accel.start();
tomoya123 0:d53e9c6fc771 151 accel.write(addr);
tomoya123 0:d53e9c6fc771 152 accel.write(0x2C);
tomoya123 0:d53e9c6fc771 153 accel.start();
tomoya123 0:d53e9c6fc771 154 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 155 _zmsb = accel.read(0);
tomoya123 0:d53e9c6fc771 156 accel.stop();
tomoya123 0:d53e9c6fc771 157 accel.start();
tomoya123 0:d53e9c6fc771 158 accel.write(addr);
tomoya123 0:d53e9c6fc771 159 accel.write(0x2D);
tomoya123 0:d53e9c6fc771 160 accel.start();
tomoya123 0:d53e9c6fc771 161 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 162 _zlsb = accel.read(0);
tomoya123 0:d53e9c6fc771 163 accel.stop();
tomoya123 0:d53e9c6fc771 164 acc = (_zmsb << 6) | (_zlsb >> 2);
tomoya123 0:d53e9c6fc771 165 if (acc > UINT14_MAX/2)
tomoya123 0:d53e9c6fc771 166 {
tomoya123 0:d53e9c6fc771 167 acc -= UINT14_MAX;
tomoya123 0:d53e9c6fc771 168 }
tomoya123 0:d53e9c6fc771 169 az = acc/4096.0*9.81;
tomoya123 0:d53e9c6fc771 170 return(az);
tomoya123 0:d53e9c6fc771 171 }
tomoya123 0:d53e9c6fc771 172
tomoya123 0:d53e9c6fc771 173 void HeptaAccel::sensing_u16(char* ax_u16,char* ay_u16,char* az_u16, int *dsize)
tomoya123 0:d53e9c6fc771 174 {
tomoya123 0:d53e9c6fc771 175 char a1[8]={0x00},a2[8]={0x00};
tomoya123 0:d53e9c6fc771 176 accel.start();
tomoya123 0:d53e9c6fc771 177 accel.write(addr);
tomoya123 0:d53e9c6fc771 178 accel.write(0x01);
tomoya123 0:d53e9c6fc771 179 accel.start();
tomoya123 0:d53e9c6fc771 180 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 181 _xmsb = accel.read(0);
tomoya123 0:d53e9c6fc771 182 accel.stop();
tomoya123 0:d53e9c6fc771 183 accel.start();
tomoya123 0:d53e9c6fc771 184 accel.write(addr);
tomoya123 0:d53e9c6fc771 185 accel.write(0x02);
tomoya123 0:d53e9c6fc771 186 accel.start();
tomoya123 0:d53e9c6fc771 187 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 188 _xlsb = accel.read(0);
tomoya123 0:d53e9c6fc771 189 accel.stop();
tomoya123 0:d53e9c6fc771 190 sprintf( a1, "%02X", ((_xmsb)) & 0xFF);
tomoya123 0:d53e9c6fc771 191 sprintf( a2, "%02X", ((_xlsb)) & 0xFF);
tomoya123 0:d53e9c6fc771 192 ax_u16[0]=a1[0];
tomoya123 0:d53e9c6fc771 193 ax_u16[1]=a1[1];
tomoya123 0:d53e9c6fc771 194 ax_u16[2]=a2[0];
tomoya123 0:d53e9c6fc771 195 ax_u16[3]=a2[1];
tomoya123 0:d53e9c6fc771 196
tomoya123 0:d53e9c6fc771 197 accel.start();
tomoya123 0:d53e9c6fc771 198 accel.write(addr);
tomoya123 0:d53e9c6fc771 199 accel.write(0x03);
tomoya123 0:d53e9c6fc771 200 accel.start();
tomoya123 0:d53e9c6fc771 201 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 202 _ymsb = accel.read(0);
tomoya123 0:d53e9c6fc771 203 accel.stop();
tomoya123 0:d53e9c6fc771 204 accel.start();
tomoya123 0:d53e9c6fc771 205 accel.write(addr);
tomoya123 0:d53e9c6fc771 206 accel.write(0x04);
tomoya123 0:d53e9c6fc771 207 accel.start();
tomoya123 0:d53e9c6fc771 208 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 209 _ylsb = accel.read(0);
tomoya123 0:d53e9c6fc771 210 accel.stop();
tomoya123 0:d53e9c6fc771 211 sprintf( a1, "%02X", ((_ymsb)) & 0xFF);
tomoya123 0:d53e9c6fc771 212 sprintf( a2, "%02X", ((_ylsb)) & 0xFF);
tomoya123 0:d53e9c6fc771 213 ay_u16[0]=a1[0];
tomoya123 0:d53e9c6fc771 214 ay_u16[1]=a1[1];
tomoya123 0:d53e9c6fc771 215 ay_u16[2]=a2[0];
tomoya123 0:d53e9c6fc771 216 ay_u16[3]=a2[1];
tomoya123 0:d53e9c6fc771 217
tomoya123 0:d53e9c6fc771 218 accel.start();
tomoya123 0:d53e9c6fc771 219 accel.write(addr);
tomoya123 0:d53e9c6fc771 220 accel.write(0x05);
tomoya123 0:d53e9c6fc771 221 accel.start();
tomoya123 0:d53e9c6fc771 222 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 223 _zmsb = accel.read(0);
tomoya123 0:d53e9c6fc771 224 accel.stop();
tomoya123 0:d53e9c6fc771 225 accel.start();
tomoya123 0:d53e9c6fc771 226 accel.write(addr);
tomoya123 0:d53e9c6fc771 227 accel.write(0x06);
tomoya123 0:d53e9c6fc771 228 accel.start();
tomoya123 0:d53e9c6fc771 229 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 230 _zlsb = accel.read(0);
tomoya123 0:d53e9c6fc771 231 accel.stop();
tomoya123 0:d53e9c6fc771 232 sprintf( a1, "%02X", ((_zmsb)) & 0xFF);
tomoya123 0:d53e9c6fc771 233 sprintf( a2, "%02X", ((_zlsb)) & 0xFF);
tomoya123 0:d53e9c6fc771 234 az_u16[0]=a1[0];
tomoya123 0:d53e9c6fc771 235 az_u16[1]=a1[1];
tomoya123 0:d53e9c6fc771 236 az_u16[2]=a2[0];
tomoya123 0:d53e9c6fc771 237 az_u16[3]=a2[1];
tomoya123 0:d53e9c6fc771 238 *dsize = 4;
tomoya123 0:d53e9c6fc771 239 }
tomoya123 0:d53e9c6fc771 240
tomoya123 0:d53e9c6fc771 241 void HeptaAccel::x_u16(char* a_u16, int *dsize)
tomoya123 0:d53e9c6fc771 242 {
tomoya123 0:d53e9c6fc771 243 char a1[8]={0x00},a2[8]={0x00};
tomoya123 0:d53e9c6fc771 244 accel.start();
tomoya123 0:d53e9c6fc771 245 accel.write(addr);
tomoya123 0:d53e9c6fc771 246 accel.write(0x01);
tomoya123 0:d53e9c6fc771 247 accel.start();
tomoya123 0:d53e9c6fc771 248 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 249 _xmsb = accel.read(0);
tomoya123 0:d53e9c6fc771 250 accel.stop();
tomoya123 0:d53e9c6fc771 251 accel.start();
tomoya123 0:d53e9c6fc771 252 accel.write(addr);
tomoya123 0:d53e9c6fc771 253 accel.write(0x02);
tomoya123 0:d53e9c6fc771 254 accel.start();
tomoya123 0:d53e9c6fc771 255 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 256 _xlsb = accel.read(0);
tomoya123 0:d53e9c6fc771 257 accel.stop();
tomoya123 0:d53e9c6fc771 258 sprintf( a1, "%02X", ((_xmsb)) & 0xFF);
tomoya123 0:d53e9c6fc771 259 sprintf( a2, "%02X", ((_xlsb)) & 0xFF);
tomoya123 0:d53e9c6fc771 260 a_u16[0]=a1[0];
tomoya123 0:d53e9c6fc771 261 a_u16[1]=a1[1];
tomoya123 0:d53e9c6fc771 262 a_u16[2]=a2[0];
tomoya123 0:d53e9c6fc771 263 a_u16[3]=a2[1];
tomoya123 0:d53e9c6fc771 264 *dsize = 4;
tomoya123 0:d53e9c6fc771 265 }
tomoya123 0:d53e9c6fc771 266
tomoya123 0:d53e9c6fc771 267 void HeptaAccel::y_u16(char* a_u16, int *dsize)
tomoya123 0:d53e9c6fc771 268 {
tomoya123 0:d53e9c6fc771 269 char a1[8]={0x00},a2[8]={0x00};
tomoya123 0:d53e9c6fc771 270 accel.start();
tomoya123 0:d53e9c6fc771 271 accel.write(addr);
tomoya123 0:d53e9c6fc771 272 accel.write(0x03);
tomoya123 0:d53e9c6fc771 273 accel.start();
tomoya123 0:d53e9c6fc771 274 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 275 _ymsb = accel.read(0);
tomoya123 0:d53e9c6fc771 276 accel.stop();
tomoya123 0:d53e9c6fc771 277 accel.start();
tomoya123 0:d53e9c6fc771 278 accel.write(addr);
tomoya123 0:d53e9c6fc771 279 accel.write(0x04);
tomoya123 0:d53e9c6fc771 280 accel.start();
tomoya123 0:d53e9c6fc771 281 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 282 _ylsb = accel.read(0);
tomoya123 0:d53e9c6fc771 283 accel.stop();
tomoya123 0:d53e9c6fc771 284 sprintf( a1, "%02X", ((_ymsb)) & 0xFF);
tomoya123 0:d53e9c6fc771 285 sprintf( a2, "%02X", ((_ylsb)) & 0xFF);
tomoya123 0:d53e9c6fc771 286 a_u16[0]=a1[0];
tomoya123 0:d53e9c6fc771 287 a_u16[1]=a1[1];
tomoya123 0:d53e9c6fc771 288 a_u16[2]=a2[0];
tomoya123 0:d53e9c6fc771 289 a_u16[3]=a2[1];
tomoya123 0:d53e9c6fc771 290 *dsize = 4;
tomoya123 0:d53e9c6fc771 291 }
tomoya123 0:d53e9c6fc771 292
tomoya123 0:d53e9c6fc771 293 void HeptaAccel::z_u16(char* a_u16, int *dsize)
tomoya123 0:d53e9c6fc771 294 {
tomoya123 0:d53e9c6fc771 295 char a1[8]={0x00},a2[8]={0x00};
tomoya123 0:d53e9c6fc771 296 accel.start();
tomoya123 0:d53e9c6fc771 297 accel.write(addr);
tomoya123 0:d53e9c6fc771 298 accel.write(0x05);
tomoya123 0:d53e9c6fc771 299 accel.start();
tomoya123 0:d53e9c6fc771 300 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 301 _zmsb = accel.read(0);
tomoya123 0:d53e9c6fc771 302 accel.stop();
tomoya123 0:d53e9c6fc771 303 accel.start();
tomoya123 0:d53e9c6fc771 304 accel.write(addr);
tomoya123 0:d53e9c6fc771 305 accel.write(0x06);
tomoya123 0:d53e9c6fc771 306 accel.start();
tomoya123 0:d53e9c6fc771 307 accel.write(addr|0x01);
tomoya123 0:d53e9c6fc771 308 _zlsb = accel.read(0);
tomoya123 0:d53e9c6fc771 309 accel.stop();
tomoya123 0:d53e9c6fc771 310 sprintf( a1, "%02X", ((_zmsb)) & 0xFF);
tomoya123 0:d53e9c6fc771 311 sprintf( a2, "%02X", ((_zlsb)) & 0xFF);
tomoya123 0:d53e9c6fc771 312 a_u16[0]=a1[0];
tomoya123 0:d53e9c6fc771 313 a_u16[1]=a1[1];
tomoya123 0:d53e9c6fc771 314 a_u16[2]=a2[0];
tomoya123 0:d53e9c6fc771 315 a_u16[3]=a2[1];
tomoya123 0:d53e9c6fc771 316 *dsize = 4;
tomoya123 0:d53e9c6fc771 317 }