From e1c1d23545a5615c35e36ccac993e719262a6693 Mon Sep 17 00:00:00 2001 From: Sebastian Reichel Date: Mon, 15 Oct 2012 01:08:04 +0200 Subject: ADXL345: more precision, handle negative values --- sensors/accelerometer/adxl345.vala | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'sensors') diff --git a/sensors/accelerometer/adxl345.vala b/sensors/accelerometer/adxl345.vala index 3cc8be7..a90e792 100644 --- a/sensors/accelerometer/adxl345.vala +++ b/sensors/accelerometer/adxl345.vala @@ -14,8 +14,8 @@ */ public class ADXL345 : I2CDevice, Accelerometer { - /* ADXL345 3.9mG per LSB */ - private static const double scale_factor = (3.9 / 1000.0); + private static const double MG_PER_LSB = 3.9; + private static const double MG_PER_G = 1000.0; public ADXL345(uint8 dev, uint8 addr = 0x53) throws I2CError { setup(dev, addr); @@ -61,9 +61,9 @@ public class ADXL345 : I2CDevice, Accelerometer { public void get_data(out double x, out double y, out double z) throws I2CError { var data = get_block(0x32, 6); - x = (data[0] | data[1] << 8) * scale_factor; - y = (data[2] | data[3] << 8) * scale_factor; - z = (data[4] | data[5] << 8) * scale_factor; + x = ((int16) (data[0] | data[1] << 8) * MG_PER_LSB) / MG_PER_G; + y = ((int16) (data[2] | data[3] << 8) * MG_PER_LSB) / MG_PER_G; + z = ((int16) (data[4] | data[5] << 8) * MG_PER_LSB) / MG_PER_G; } } -- cgit v1.2.3