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
mma8452.cpp@2:ba3e65007adf, 2017-09-18 (annotated)
- Committer:
- jurica238814
- Date:
- Mon Sep 18 10:08:51 2017 +0000
- Revision:
- 2:ba3e65007adf
- Parent:
- 0:65b19bf1382a
Some small changes.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jurica238814 | 0:65b19bf1382a | 1 | /* |
jurica238814 | 0:65b19bf1382a | 2 | * Library for mma8452 3-Axis, 12-bit/8-bit, Digital Accelerometer |
jurica238814 | 0:65b19bf1382a | 3 | * Made by Jurica Resetar |
jurica238814 | 0:65b19bf1382a | 4 | * jurica_resetar@yahoo.com |
jurica238814 | 0:65b19bf1382a | 5 | * |
jurica238814 | 0:65b19bf1382a | 6 | * All rights reserved |
jurica238814 | 0:65b19bf1382a | 7 | */ |
jurica238814 | 0:65b19bf1382a | 8 | |
jurica238814 | 0:65b19bf1382a | 9 | |
jurica238814 | 0:65b19bf1382a | 10 | #include "mma8452.h" |
jurica238814 | 0:65b19bf1382a | 11 | |
jurica238814 | 0:65b19bf1382a | 12 | Acc_MMA8452::Acc_MMA8452(PinName sda, PinName scl, char address): i2c(sda, scl), acc_address(address){ |
jurica238814 | 0:65b19bf1382a | 13 | } |
jurica238814 | 0:65b19bf1382a | 14 | |
jurica238814 | 0:65b19bf1382a | 15 | Acc_MMA8452::~Acc_MMA8452(){ |
jurica238814 | 0:65b19bf1382a | 16 | } |
jurica238814 | 0:65b19bf1382a | 17 | |
jurica238814 | 0:65b19bf1382a | 18 | uint8_t Acc_MMA8452::set_register(char reg, char data){ |
jurica238814 | 0:65b19bf1382a | 19 | char cmd[2] = {0, 0}; |
jurica238814 | 0:65b19bf1382a | 20 | i2c.start(); |
jurica238814 | 0:65b19bf1382a | 21 | cmd[0] = MODE_STATUS; |
jurica238814 | 0:65b19bf1382a | 22 | cmd[1] = 0x00; // Standby Mode on |
jurica238814 | 0:65b19bf1382a | 23 | i2c.write(acc_address, cmd, 2); |
jurica238814 | 0:65b19bf1382a | 24 | |
jurica238814 | 0:65b19bf1382a | 25 | cmd[0] = reg; |
jurica238814 | 0:65b19bf1382a | 26 | cmd[1] = data; // New value of the register |
jurica238814 | 0:65b19bf1382a | 27 | i2c.write(acc_address, cmd, 2); |
jurica238814 | 0:65b19bf1382a | 28 | |
jurica238814 | 0:65b19bf1382a | 29 | cmd[0] = MODE_STATUS; |
jurica238814 | 0:65b19bf1382a | 30 | cmd[1] = 0x01; // Active Mode on |
jurica238814 | 0:65b19bf1382a | 31 | i2c.write(acc_address, cmd, 2); |
jurica238814 | 0:65b19bf1382a | 32 | i2c.stop(); |
jurica238814 | 0:65b19bf1382a | 33 | return 0; // Success |
jurica238814 | 0:65b19bf1382a | 34 | } |
jurica238814 | 0:65b19bf1382a | 35 | |
jurica238814 | 0:65b19bf1382a | 36 | uint8_t Acc_MMA8452::get_register(char reg, char *data){ |
jurica238814 | 0:65b19bf1382a | 37 | char temp_read = 2; |
jurica238814 | 0:65b19bf1382a | 38 | i2c.start(); |
jurica238814 | 0:65b19bf1382a | 39 | if(i2c.write(acc_address & 0xFE) == 0){ // just good practice to force bit 1 to a '0' by ANDing with 0xFE |
jurica238814 | 0:65b19bf1382a | 40 | return 1; // we failed to write the mcu address on the bus to initiate dialogue |
jurica238814 | 0:65b19bf1382a | 41 | } |
jurica238814 | 0:65b19bf1382a | 42 | if(i2c.write(reg) == 0){ |
jurica238814 | 0:65b19bf1382a | 43 | return 1; // we failed to write 'who am i' to the chip |
jurica238814 | 0:65b19bf1382a | 44 | } |
jurica238814 | 0:65b19bf1382a | 45 | i2c.start(); |
jurica238814 | 0:65b19bf1382a | 46 | 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... |
jurica238814 | 0:65b19bf1382a | 47 | return 1; // we failed to request a read from that mcu - this really is just writing the mcu vaule on the bus |
jurica238814 | 0:65b19bf1382a | 48 | } |
jurica238814 | 0:65b19bf1382a | 49 | temp_read = i2c.read(0); |
jurica238814 | 0:65b19bf1382a | 50 | i2c.stop(); |
jurica238814 | 0:65b19bf1382a | 51 | *data = temp_read; |
jurica238814 | 0:65b19bf1382a | 52 | |
jurica238814 | 0:65b19bf1382a | 53 | return 0; // Success |
jurica238814 | 0:65b19bf1382a | 54 | } |
jurica238814 | 0:65b19bf1382a | 55 | |
jurica238814 | 0:65b19bf1382a | 56 | uint8_t Acc_MMA8452::get_x_acc(char *data){ |
jurica238814 | 0:65b19bf1382a | 57 | get_register(OUT_X_MSB, data); |
jurica238814 | 0:65b19bf1382a | 58 | return 0; |
jurica238814 | 0:65b19bf1382a | 59 | } |
jurica238814 | 0:65b19bf1382a | 60 | uint8_t Acc_MMA8452::get_y_acc(char *data){ |
jurica238814 | 0:65b19bf1382a | 61 | get_register(OUT_Y_MSB, data); |
jurica238814 | 0:65b19bf1382a | 62 | return 0; |
jurica238814 | 0:65b19bf1382a | 63 | } |
jurica238814 | 0:65b19bf1382a | 64 | uint8_t Acc_MMA8452::get_z_acc(char *data){ |
jurica238814 | 0:65b19bf1382a | 65 | get_register(OUT_Z_MSB, data); |
jurica238814 | 0:65b19bf1382a | 66 | return 0; |
jurica238814 | 0:65b19bf1382a | 67 | } |