MMA8452Q, 3-axis, 12-bit/8-bit digital accelerometer library. Developed by aconno dev team. For example program with the library, contact us.
Dependents: acd52832_BLE_VF_GeoBeacon
Diff: mma8452.cpp
- Revision:
- 0:65b19bf1382a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mma8452.cpp Sun Jul 02 16:04:27 2017 +0000 @@ -0,0 +1,67 @@ +/* + * Library for mma8452 3-Axis, 12-bit/8-bit, Digital Accelerometer + * Made by Jurica Resetar + * jurica_resetar@yahoo.com + * + * All rights reserved + */ + + +#include "mma8452.h" + +Acc_MMA8452::Acc_MMA8452(PinName sda, PinName scl, char address): i2c(sda, scl), acc_address(address){ +} + +Acc_MMA8452::~Acc_MMA8452(){ +} + +uint8_t Acc_MMA8452::set_register(char reg, char data){ + char cmd[2] = {0, 0}; + i2c.start(); + cmd[0] = MODE_STATUS; + cmd[1] = 0x00; // Standby Mode on + i2c.write(acc_address, cmd, 2); + + cmd[0] = reg; + cmd[1] = data; // New value of the register + i2c.write(acc_address, cmd, 2); + + cmd[0] = MODE_STATUS; + cmd[1] = 0x01; // Active Mode on + i2c.write(acc_address, cmd, 2); + i2c.stop(); + return 0; // Success +} + +uint8_t Acc_MMA8452::get_register(char reg, char *data){ + char temp_read = 2; + i2c.start(); + if(i2c.write(acc_address & 0xFE) == 0){ // just good practice to force bit 1 to a '0' by ANDing with 0xFE + return 1; // we failed to write the mcu address on the bus to initiate dialogue + } + if(i2c.write(reg) == 0){ + return 1; // we failed to write 'who am i' to the chip + } + i2c.start(); + if(i2c.write(acc_address | 0x01) == 0){ // this is asking to read the slave mcu address - even though it's a 'write' method!!! Crap API... + return 1; // we failed to request a read from that mcu - this really is just writing the mcu vaule on the bus + } + temp_read = i2c.read(0); + i2c.stop(); + *data = temp_read; + + return 0; // Success +} + +uint8_t Acc_MMA8452::get_x_acc(char *data){ + get_register(OUT_X_MSB, data); + return 0; +} +uint8_t Acc_MMA8452::get_y_acc(char *data){ + get_register(OUT_Y_MSB, data); + return 0; +} +uint8_t Acc_MMA8452::get_z_acc(char *data){ + get_register(OUT_Z_MSB, data); + return 0; +} \ No newline at end of file