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

Dependencies:   mbed

Revision:
0:10e5fb9080cf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Nov 10 20:13:23 2010 +0000
@@ -0,0 +1,53 @@
+#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);
+    }
+}