thisone

Dependents:   LCD_ACC_46_v4-8g

Fork of MMA8451Q8 by Stanley Cohen

Files at this revision

API Documentation at this revision

Comitter:
mturner5
Date:
Mon Mar 06 10:19:57 2017 +0000
Parent:
7:7812354ef684
Child:
9:79ca3a3ce1e7
Commit message:
revised

Changed in this revision

MMA8451Q8.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/MMA8451Q8.cpp	Wed Feb 22 15:35:47 2017 +0000
+++ b/MMA8451Q8.cpp	Mon Mar 06 10:19:57 2017 +0000
@@ -35,6 +35,8 @@
 
 #define GSCALING          1024.0
 
+float gScaling[3] = {4095.0,2048.0,1024.0}; //scaling for acceleration?
+
 MMA8451Q::MMA8451Q(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) {
     // activate the peripheral
     uint8_t data[2] = {REG_CTRL_REG_1, 0x01};
@@ -48,27 +50,28 @@
     readRegs(REG_WHO_AM_I, &who_am_i, 1);
     return who_am_i;
 }
-void MMA8451Q::setGLimit() {   
-    uint8_t data[2] = {REG_CTRL_REG_1, 0x00};
-    writeRegs(data, 2); // put in standby
-    data[0] = XYZ_DATA_CFG;
-    data[1] = MAX_8G;
+void MMA8451Q::setGLimit(int gSelect) {   
+    uint8_t data[NUM_DATA] = {REG_CTRL_REG_1, 0x00};
+    gChosen = gSelect;
+    writeRegs(data, NUM_DATA); // put in standby
+    data[ADRESS_INDEX ] = XYZ_DATA_CFG;
+    data[DATA_INDEX] = gChosen;
     writeRegs(data, 2);// change g limit
-    data[0] = REG_CTRL_REG_1;
-    data[1] = 0x01;
+    data[ADRESS_INDEX ] = REG_CTRL_REG_1;
+    data[DATA_INDEX] = 0x01;
     writeRegs(data, 2); // make active
 }
 
 float MMA8451Q::getAccX() {
-    return (float(getAccAxis(REG_OUT_X_MSB))/GSCALING);
+    return (float(getAccAxis(REG_OUT_X_MSB))/GSCALING[gChosen]);
 }
 
 float MMA8451Q::getAccY() {
-    return (float(getAccAxis(REG_OUT_Y_MSB))/GSCALING);
+    return (float(getAccAxis(REG_OUT_Y_MSB))/GSCALING[gChosen]);
 }
 
 float MMA8451Q::getAccZ() {
-    return (float(getAccAxis(REG_OUT_Z_MSB))/GSCALING);
+    return (float(getAccAxis(REG_OUT_Z_MSB))/GSCALING[gChosen]);
 }
 
 void MMA8451Q::getAccAllAxis(float * res) {
@@ -98,3 +101,20 @@
 void MMA8451Q::writeRegs(uint8_t * data, int len) {
     m_i2c.write(m_addr, (char *)data, len);
 }
+
+    void getAccAllAxis(float * res);
+
+int16_t getAccAxis(uint8_t addr);
+
+    I2C m_i2c;
+    int m_addr;
+    int gChosen;
+    
+    void setGLimit(int gSelect);
+    void setStandbyMode();
+    void setActiveMode();
+    void readRegs(int addr, uint8_t * data, int len);
+    void writeRegs(uint8_t * data, int len);
+    
+private:
+