BMA180 triple axis accelerometer example. https://www.sparkfun.com/commerce/product_info.php?products_id=9723
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 }
Generated on Wed Jul 20 2022 14:02:21 by 1.7.2