summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Reichel <sre@ring0.de>2012-10-15 01:08:04 +0200
committerSebastian Reichel <sre@ring0.de>2012-10-15 01:08:04 +0200
commite1c1d23545a5615c35e36ccac993e719262a6693 (patch)
treef88a9b8746c40c34b83c97bb4668c6786dbbcf0b
parent1523ee7ee712d19c33c360b81328ae871e54caa4 (diff)
downloadmicrocopterd-e1c1d23545a5615c35e36ccac993e719262a6693.tar.bz2
ADXL345: more precision, handle negative values
-rw-r--r--sensors/accelerometer/adxl345.vala10
1 files changed, 5 insertions, 5 deletions
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;
}
}