BMA180 triple axis accelerometer example. https://www.sparkfun.com/commerce/product_info.php?products_id=9723

Dependencies:   mbed

main.cpp

Committer:
mux
Date:
2010-11-10
Revision:
0:10e5fb9080cf

File content as of revision 0:10e5fb9080cf:

#include "mbed.h"
#define BMA180_ID       0x00
#define BMA180_ADDR     0x80 //datasheet says 0x40 !
#define BMA180_X_ACC    0x02
#define BMA180_Y_ACC    0x04
#define BMA180_Z_ACC    0x06
#define BMA180_SDA      p9
#define BMA180_SCL      p10
I2C i2c(BMA180_SDA, BMA180_SCL);

int main() {
    char data[2];
    int16_t x,y,z;
    
    i2c.frequency(100000);
    
    //read chip_id
    data[0] = BMA180_ID;
    data[1] = 0x00;
    
    i2c.write(BMA180_ADDR, data, 1);    
    i2c.read(BMA180_ADDR, data, 1);  
        
    if (data[0] != 0x03) {
        printf("invalid chip id %d\n", data[0]);
        return 1;
    }
    
    while(1) {
        data[0] = BMA180_X_ACC;
        i2c.write(BMA180_ADDR, data, 1);
        i2c.read(BMA180_ADDR, data, 2);
        data[0] >>= 2;
        x  = *((int16_t*)data);
        
        data[0] = BMA180_Y_ACC;
        i2c.write(BMA180_ADDR, data, 1);
        i2c.read(BMA180_ADDR, data, 2);
        data[0] >>= 2;
        y  = *((int16_t*)data);
       
        data[0] = BMA180_Z_ACC;
        i2c.write(BMA180_ADDR, data, 1);
        i2c.read(BMA180_ADDR, data, 2);
        data[0] >>= 2;
        z  = *((int16_t*)data);
                
        //printf("x: %d y: %d z: %d\n", x, y, z);
        printf("x: %.1f y: %.1f z: %.1f\n", x/16384.0f, y/16384.0f, z/16384.0f); //2^14
        
        wait_ms(100);
    }
}