Library for MMA7660FC Accelerometer device
Dependents: TestCode_MMA7660FC 3D_Accelerometer_Tester RTOS-aap-board-modules embed_Grove_3-Axis_Digital_Accelerometer ... more
Diff: MMA7660FC.cpp
- Revision:
- 8:122af194c74b
- Parent:
- 7:74eb2a4803ba
- Child:
- 9:2cc4a317402d
diff -r 74eb2a4803ba -r 122af194c74b MMA7660FC.cpp --- a/MMA7660FC.cpp Wed Aug 07 19:33:25 2013 +0000 +++ b/MMA7660FC.cpp Wed Aug 07 19:50:09 2013 +0000 @@ -28,33 +28,28 @@ // Connect module at I2C address addr using I2C port pins sda and scl MMA7660FC::MMA7660FC(PinName sda, PinName scl, int addr) : m_i2c(sda, scl) { - SPI_W_Address = addr; // Write address - SPI_R_Address = SPI_W_Address | 1; // Read address - + SPI_W_Address = addr; // Write address + SPI_R_Address = SPI_W_Address | 1; // Read address } // Destroys instance MMA7660FC::~MMA7660FC() { - } // Device initialization void MMA7660FC::init() -{ - +{ write_reg(INTSU_STATUS, 0x10); // automatic interrupt after every measurement - write_reg(SR_STATUS, 0x07); // 1 Samples/Second - + write_reg(SR_STATUS, 0x07); // 1 Samples/Second } // Reads the tilt angle void MMA7660FC::read_Tilt(float *x, float *y, float *z) { - const char Addr_X = OUT_X; char buf[3] = {0,0,0}; @@ -64,15 +59,13 @@ // returns the x, y, z coordinates transformed into full degrees *x = TILT_XY[(int)buf[0]]; *y = TILT_XY[(int)buf[1]]; - *z = TILT_Z[(int)buf[2]]; - + *z = TILT_Z[(int)buf[2]]; } // Reads x data int MMA7660FC::read_x() { - m_i2c.start(); // Start m_i2c.write(SPI_W_Address); // A write to device m_i2c.write(OUT_X); // Register to read @@ -82,14 +75,12 @@ m_i2c.stop(); return (int)x; - } // Reads y data int MMA7660FC::read_y() { - m_i2c.start(); // Start m_i2c.write(SPI_W_Address); // A write to device m_i2c.write(OUT_Y); // Register to read @@ -99,14 +90,12 @@ m_i2c.stop(); return (int)y; - } // Reads z data int MMA7660FC::read_z() { - m_i2c.start(); // Start m_i2c.write(SPI_W_Address); // A write to device m_i2c.write(OUT_Z); // Register to read @@ -116,14 +105,44 @@ m_i2c.stop(); return (int)z; +} + // Reads MMA7660FC Orientation +char const* MMA7660FC::read_Side() +{ + char tiltStatus = read_reg(TILT_STATUS); + + if((tiltStatus & 0x03) == 0x01) + return "Front"; + if((tiltStatus & 0x03) == 0x02) + return "Back"; + + return "Unknown"; } + // Reads MMA7660FC Orientation +char const* MMA7660FC::read_Orientation() +{ + char tiltStatus = read_reg(TILT_STATUS); + + if((tiltStatus & 0x1c) == 0x04) + return "Left"; + if((tiltStatus & 0x1c) == 0x08) + return "Right"; + if((tiltStatus & 0x1c) == 0x14) + return "Down"; + if((tiltStatus & 0x1c) == 0x18) + return "Up"; + + return "Unknown"; +} + + + // Read from specified MMA7660FC register char MMA7660FC::read_reg(char addr) -{ - +{ m_i2c.start(); // Start m_i2c.write(SPI_W_Address); // A write to device m_i2c.write(addr); // Register to read @@ -132,15 +151,13 @@ char c = m_i2c.read(0); // Read the data m_i2c.stop(); - return c; - + return c; } // Write register (The device must be placed in Standby Mode to change the value of the registers) void MMA7660FC::write_reg(char addr, char data) { - char cmd[2] = {0, 0}; cmd[0] = MODE_STATUS; @@ -153,15 +170,12 @@ cmd[0] = MODE_STATUS; cmd[1] = 0x01; // Active Mode on - m_i2c.write(SPI_W_Address, cmd, 2); - + m_i2c.write(SPI_W_Address, cmd, 2); } // check if the address exist on an I2C bus int MMA7660FC::check() -{ - +{ return m_i2c.write(SPI_W_Address, NULL, 0); - } \ No newline at end of file