Donovan Lee
/
I2C_learn
ghetto code to run MMA
main.cpp
- Committer:
- donoman
- Date:
- 2014-04-18
- Revision:
- 0:3718fa40956d
File content as of revision 0:3718fa40956d:
#include "mbed.h" #define MMA8451_I2C_ADDRESS (0x1d<<1) #define REG_WHO_AM_I 0x0D #define REG_CTRL_REG1 0x2A #define REG_CTRL_REG2 0x2B #define REG_CTRL_REG3 0x2C #define REG_SYSMOD 0x0B #define REG_OUT_X_MSB 0x01 DigitalOut myled(LED_GREEN); Serial pc(USBTX, USBRX); I2C i2c(PTE25, PTE24); //MMA8451 Accelerometer int main() { pc.baud(9600); uint8_t reg1_orig; char t1[1] = {REG_CTRL_REG1}; i2c.write(MMA8451_I2C_ADDRESS, t1, 1, true); i2c.read(MMA8451_I2C_ADDRESS, (char*) ®1_orig, 1); uint8_t reg2_orig; char t3[1] = {REG_CTRL_REG2}; i2c.write(MMA8451_I2C_ADDRESS, t3, 1, true); i2c.read(MMA8451_I2C_ADDRESS, (char*) ®2_orig, 1); while (true) { //This uses the I2C library function long forms pc.printf("reg1_orig: %x\n", reg1_orig); pc.printf("reg2_orig: %x\n", reg2_orig); uint8_t who_am_i; char t[1] = {REG_WHO_AM_I}; i2c.write(MMA8451_I2C_ADDRESS, t, 1, true); i2c.read(MMA8451_I2C_ADDRESS, (char*) &who_am_i, 1); pc.printf("WAI: %x\n", who_am_i); //Print both to screen uint8_t x_val; char tx_val[1] = {REG_OUT_X_MSB}; i2c.write(MMA8451_I2C_ADDRESS, tx_val, 1, true); i2c.read(MMA8451_I2C_ADDRESS, (char*) &x_val, 1); pc.printf("x: %x\n", x_val); //Print both to screen myled=0; wait(0.1); myled=1; wait(0.1); myled=0; wait(0.1); myled=1; wait(0.1); uint8_t w1[2] = {REG_CTRL_REG1, 0x01}; i2c.write(MMA8451_I2C_ADDRESS, (char *) w1, 2); uint8_t w2[2] = {REG_CTRL_REG2, 0x00}; i2c.write(MMA8451_I2C_ADDRESS, (char *) w2, 2); wait(5); //delay for measurement myled=0; wait(0.1); myled=1; wait(0.1); uint8_t w1_off[2] = {REG_CTRL_REG1, 0x00}; i2c.write(MMA8451_I2C_ADDRESS, (char *) w1_off, 2); wait(5); //delay for measurement uint8_t reg1_value=6; i2c.write(MMA8451_I2C_ADDRESS, t1, 1, true); i2c.read(MMA8451_I2C_ADDRESS, (char*) ®1_value, 1); pc.printf("reg1_new: %x\n", reg1_value); //Print both to screen uint8_t reg2_value=6; i2c.write(MMA8451_I2C_ADDRESS, t3, 1, true); i2c.read(MMA8451_I2C_ADDRESS, (char*) ®2_value, 1); pc.printf("reg2_new: %x\n", reg2_value); //Print both to screen //End of Long form //wait(5); uint8_t sys_mod; char t2[1] = {REG_SYSMOD}; i2c.write(MMA8451_I2C_ADDRESS, t2, 1, true); i2c.read(MMA8451_I2C_ADDRESS, (char*) &sys_mod, 1); pc.printf("Sysmod: %x\n", sys_mod); //Print both to screen //pc.printf("WAI: %x, Reg1: %x\n", who_am_i, reg1_value); //Print both to screen //pc.printf("Short: %x Long: %x\n", who_am_i, who_am_i_2); //Print both to screen //myled = !myled; //Heartbeat } } /* void MMA8451Q::readRegs(int addr, uint8_t * data, int len) { char t[1] = {addr}; m_i2c.write(m_addr, t, 1, true); m_i2c.read(m_addr, (char *)data, len); }*/