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

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #define BMA180_ID       0x00
00003 #define BMA180_ADDR     0x80 //datasheet says 0x40 !
00004 #define BMA180_X_ACC    0x02
00005 #define BMA180_Y_ACC    0x04
00006 #define BMA180_Z_ACC    0x06
00007 #define BMA180_SDA      p9
00008 #define BMA180_SCL      p10
00009 I2C i2c(BMA180_SDA, BMA180_SCL);
00010 
00011 int main() {
00012     char data[2];
00013     int16_t x,y,z;
00014     
00015     i2c.frequency(100000);
00016     
00017     //read chip_id
00018     data[0] = BMA180_ID;
00019     data[1] = 0x00;
00020     
00021     i2c.write(BMA180_ADDR, data, 1);    
00022     i2c.read(BMA180_ADDR, data, 1);  
00023         
00024     if (data[0] != 0x03) {
00025         printf("invalid chip id %d\n", data[0]);
00026         return 1;
00027     }
00028     
00029     while(1) {
00030         data[0] = BMA180_X_ACC;
00031         i2c.write(BMA180_ADDR, data, 1);
00032         i2c.read(BMA180_ADDR, data, 2);
00033         data[0] >>= 2;
00034         x  = *((int16_t*)data);
00035         
00036         data[0] = BMA180_Y_ACC;
00037         i2c.write(BMA180_ADDR, data, 1);
00038         i2c.read(BMA180_ADDR, data, 2);
00039         data[0] >>= 2;
00040         y  = *((int16_t*)data);
00041        
00042         data[0] = BMA180_Z_ACC;
00043         i2c.write(BMA180_ADDR, data, 1);
00044         i2c.read(BMA180_ADDR, data, 2);
00045         data[0] >>= 2;
00046         z  = *((int16_t*)data);
00047                 
00048         //printf("x: %d y: %d z: %d\n", x, y, z);
00049         printf("x: %.1f y: %.1f z: %.1f\n", x/16384.0f, y/16384.0f, z/16384.0f); //2^14
00050         
00051         wait_ms(100);
00052     }
00053 }