Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: acd52832_BLE_VF_GeoBeacon
mma8452.cpp
00001 /* 00002 * Library for mma8452 3-Axis, 12-bit/8-bit, Digital Accelerometer 00003 * Made by Jurica Resetar 00004 * jurica_resetar@yahoo.com 00005 * 00006 * All rights reserved 00007 */ 00008 00009 00010 #include "mma8452.h" 00011 00012 Acc_MMA8452::Acc_MMA8452(PinName sda, PinName scl, char address): i2c(sda, scl), acc_address(address){ 00013 } 00014 00015 Acc_MMA8452::~Acc_MMA8452(){ 00016 } 00017 00018 uint8_t Acc_MMA8452::set_register(char reg, char data){ 00019 char cmd[2] = {0, 0}; 00020 i2c.start(); 00021 cmd[0] = MODE_STATUS; 00022 cmd[1] = 0x00; // Standby Mode on 00023 i2c.write(acc_address, cmd, 2); 00024 00025 cmd[0] = reg; 00026 cmd[1] = data; // New value of the register 00027 i2c.write(acc_address, cmd, 2); 00028 00029 cmd[0] = MODE_STATUS; 00030 cmd[1] = 0x01; // Active Mode on 00031 i2c.write(acc_address, cmd, 2); 00032 i2c.stop(); 00033 return 0; // Success 00034 } 00035 00036 uint8_t Acc_MMA8452::get_register(char reg, char *data){ 00037 char temp_read = 2; 00038 i2c.start(); 00039 if(i2c.write(acc_address & 0xFE) == 0){ // just good practice to force bit 1 to a '0' by ANDing with 0xFE 00040 return 1; // we failed to write the mcu address on the bus to initiate dialogue 00041 } 00042 if(i2c.write(reg) == 0){ 00043 return 1; // we failed to write 'who am i' to the chip 00044 } 00045 i2c.start(); 00046 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... 00047 return 1; // we failed to request a read from that mcu - this really is just writing the mcu vaule on the bus 00048 } 00049 temp_read = i2c.read(0); 00050 i2c.stop(); 00051 *data = temp_read; 00052 00053 return 0; // Success 00054 } 00055 00056 uint8_t Acc_MMA8452::get_x_acc(char *data){ 00057 get_register(OUT_X_MSB, data); 00058 return 0; 00059 } 00060 uint8_t Acc_MMA8452::get_y_acc(char *data){ 00061 get_register(OUT_Y_MSB, data); 00062 return 0; 00063 } 00064 uint8_t Acc_MMA8452::get_z_acc(char *data){ 00065 get_register(OUT_Z_MSB, data); 00066 return 0; 00067 }
Generated on Mon Jul 18 2022 03:41:50 by
1.7.2