Accel

Dependencies:   mbed PowerControl SDFileSystem

Fork of HeptaAccel by 智也 大野

Committer:
tomoya123
Date:
Tue Dec 13 07:51:40 2016 +0000
Revision:
1:63c3921c608c
Parent:
0:d721efd58e4e
Accel

Who changed what in which revision?

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