From 84f8be374bdc2aca825ffa9030c4683aa9685ebd Mon Sep 17 00:00:00 2001 From: sinseman Date: Sun, 31 Aug 2014 11:02:51 +0200 Subject: [PATCH] Update librairies --- Variometer/Variometer.ino | 1 + .../Adafruit_BMP085_U/Adafruit_BMP085_U.cpp | 53 ++++++++++++++----- .../Adafruit_BMP085_U/Adafruit_BMP085_U.h | 12 ++++- libraries/Adafruit_BMP085_U/README.md | 8 +-- libraries/Adafruit_GFX/Adafruit_GFX.cpp | 3 +- libraries/Encoder/Encoder.h | 3 +- libraries/Encoder/utility/direct_pin_read.h | 2 +- 7 files changed, 61 insertions(+), 21 deletions(-) diff --git a/Variometer/Variometer.ino b/Variometer/Variometer.ino index 3771079..600feaf 100644 --- a/Variometer/Variometer.ino +++ b/Variometer/Variometer.ino @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include diff --git a/libraries/Adafruit_BMP085_U/Adafruit_BMP085_U.cpp b/libraries/Adafruit_BMP085_U/Adafruit_BMP085_U.cpp index 13633b4..1122d12 100644 --- a/libraries/Adafruit_BMP085_U/Adafruit_BMP085_U.cpp +++ b/libraries/Adafruit_BMP085_U/Adafruit_BMP085_U.cpp @@ -20,7 +20,13 @@ #include "WProgram.h" #endif -#include +#ifdef __AVR_ATtiny85__ + #include "TinyWireM.h" + #define Wire TinyWireM +#else + #include +#endif + #include #include @@ -206,6 +212,18 @@ static void readRawPressure(int32_t *pressure) #endif } +/**************************************************************************/ +/*! + @brief Compute B5 coefficient used in temperature & pressure calcs. +*/ +/**************************************************************************/ +int32_t Adafruit_BMP085_Unified::computeB5(int32_t ut) { + int32_t X1 = (ut - (int32_t)_bmp085_coeffs.ac6) * ((int32_t)_bmp085_coeffs.ac5) >> 15; + int32_t X2 = ((int32_t)_bmp085_coeffs.mc << 11) / (X1+(int32_t)_bmp085_coeffs.md); + return X1 + X2; +} + + /*************************************************************************** CONSTRUCTOR ***************************************************************************/ @@ -272,9 +290,7 @@ void Adafruit_BMP085_Unified::getPressure(float *pressure) readRawPressure(&up); /* Temperature compensation */ - x1 = (ut - (int32_t)(_bmp085_coeffs.ac6))*((int32_t)(_bmp085_coeffs.ac5))/pow(2,15); - x2 = ((int32_t)(_bmp085_coeffs.mc*pow(2,11)))/(x1+(int32_t)(_bmp085_coeffs.md)); - b5 = x1 + x2; + b5 = computeB5(ut); /* Pressure compensation */ b6 = b5 - 4000; @@ -327,11 +343,8 @@ void Adafruit_BMP085_Unified::getTemperature(float *temp) _bmp085_coeffs.md = 2868; #endif - // step 1 - X1 = (UT - (int32_t)_bmp085_coeffs.ac6) * ((int32_t)_bmp085_coeffs.ac5) / pow(2,15); - X2 = ((int32_t)_bmp085_coeffs.mc * pow(2,11)) / (X1+(int32_t)_bmp085_coeffs.md); - B5 = X1 + X2; - t = (B5+8)/pow(2,4); + B5 = computeB5(UT); + t = (B5+8) >> 4; t /= 10; *temp = t; @@ -340,7 +353,7 @@ void Adafruit_BMP085_Unified::getTemperature(float *temp) /**************************************************************************/ /*! Calculates the altitude (in meters) from the specified atmospheric - pressure (in hPa), sea-level pressure (in hPa), and temperature (in °C) + pressure (in hPa), sea-level pressure (in hPa), and temperature (in �C) @param seaLevel Sea-level pressure in hPa @param atmospheric Atmospheric pressure in hPa @@ -358,12 +371,28 @@ float Adafruit_BMP085_Unified::pressureToAltitude(float seaLevel, float atmosphe /* where: h = height (in meters) */ /* P0 = sea-level pressure (in hPa) */ /* P = atmospheric pressure (in hPa) */ - /* T = temperature (in °C) */ + /* T = temperature (in �C) */ return (((float)pow((seaLevel/atmospheric), 0.190223F) - 1.0F) * (temp + 273.15F)) / 0.0065F; } +float Adafruit_BMP085_Unified::seaLevelForAltitude(float altitude, float atmospheric, float temp) +{ + /* Hyposometric formula: */ + /* */ + /* P0=((((h*0.0065)/(temp + 273.15F))+1)^(^/0.190223F))*P */ + /* */ + /* where: h = height (in meters) */ + /* P0 = sea-level pressure (in hPa) */ + /* P = atmospheric pressure (in hPa) */ + /* T = temperature (in �C) */ + + return (float)pow((((altitude*0.0065)/(temp + 273.15F))+1), (1.0/0.190223F))*atmospheric; +} + + + /**************************************************************************/ /*! @brief Provides the sensor_t data for this sensor @@ -403,5 +432,5 @@ void Adafruit_BMP085_Unified::getEvent(sensors_event_t *event) event->type = SENSOR_TYPE_PRESSURE; event->timestamp = 0; getPressure(&pressure_kPa); - event->pressure = pressure_kPa / 100.0F; /* kPa to hPa */ + event->pressure = pressure_kPa / 100.0F; } diff --git a/libraries/Adafruit_BMP085_U/Adafruit_BMP085_U.h b/libraries/Adafruit_BMP085_U/Adafruit_BMP085_U.h index 67bd007..386fbcc 100644 --- a/libraries/Adafruit_BMP085_U/Adafruit_BMP085_U.h +++ b/libraries/Adafruit_BMP085_U/Adafruit_BMP085_U.h @@ -24,7 +24,13 @@ #endif #include -#include + +#ifdef __AVR_ATtiny85__ + #include "TinyWireM.h" + #define Wire TinyWireM +#else + #include +#endif /*========================================================================= I2C ADDRESS/BITS @@ -99,11 +105,13 @@ class Adafruit_BMP085_Unified : public Adafruit_Sensor void getTemperature(float *temp); void getPressure(float *pressure); float pressureToAltitude(float seaLevel, float atmospheric, float temp); + float seaLevelForAltitude(float altitude, float atmospheric, float temp); void getEvent(sensors_event_t*); void getSensor(sensor_t*); private: - int32_t _sensorID; + int32_t computeB5(int32_t ut); + int32_t _sensorID; }; #endif diff --git a/libraries/Adafruit_BMP085_U/README.md b/libraries/Adafruit_BMP085_U/README.md index 0b70b25..cc2e35b 100644 --- a/libraries/Adafruit_BMP085_U/README.md +++ b/libraries/Adafruit_BMP085_U/README.md @@ -1,8 +1,8 @@ -#Adafruit Unified BMP085 Driver (Barometric Pressure Sensor) # +#Adafruit Unified BMP085/BMP180 Driver (Barometric Pressure Sensor) # -This driver is for the Adafruit BMP085 Breakout (http://www.adafruit.com/products/391), and is based on Adafruit's Unified Sensor Library (Adafruit_Sensor). +This driver is for the Adafruit BMP085 Breakout (http://www.adafruit.com/products/391) or BMP180 breakout (http://www.adafruit.com/products/1603), and is based on Adafruit's Unified Sensor Library (Adafruit_Sensor). -## About the BMP085 ## +## About the BMP085 / BMP180 ## This precision sensor from Bosch is the best low-cost sensing solution for measuring barometric pressure and temperature. Because pressure changes with altitude you can also use it as an altimeter! @@ -24,4 +24,4 @@ Light sensors will always report units in lux, gyroscopes will always report uni Adafruit invests time and resources providing this open source code. Please support Adafruit and open-source hardware by purchasing products from Adafruit! -Written by Kevin (KTOWN) Townsend for Adafruit Industries. \ No newline at end of file +Written by Kevin (KTOWN) Townsend for Adafruit Industries. diff --git a/libraries/Adafruit_GFX/Adafruit_GFX.cpp b/libraries/Adafruit_GFX/Adafruit_GFX.cpp index f043a4d..c85cfa2 100644 --- a/libraries/Adafruit_GFX/Adafruit_GFX.cpp +++ b/libraries/Adafruit_GFX/Adafruit_GFX.cpp @@ -304,7 +304,8 @@ void Adafruit_GFX::fillTriangle ( int16_t x0, int16_t y0, dx02 = x2 - x0, dy02 = y2 - y0, dx12 = x2 - x1, - dy12 = y2 - y1, + dy12 = y2 - y1; + int32_t sa = 0, sb = 0; diff --git a/libraries/Encoder/Encoder.h b/libraries/Encoder/Encoder.h index b51d3bf..6745eab 100644 --- a/libraries/Encoder/Encoder.h +++ b/libraries/Encoder/Encoder.h @@ -2,6 +2,7 @@ * http://www.pjrc.com/teensy/td_libs_Encoder.html * Copyright (c) 2011,2013 PJRC.COM, LLC - Paul Stoffregen * + * Version 1.2 - fix -2 bug in C-only code * Version 1.1 - expand to support boards with up to 60 interrupts * Version 1.0 - initial release * @@ -284,7 +285,7 @@ private: arg->position += 2; return; case 6: case 9: - arg->position += 2; + arg->position -= 2; return; } #endif diff --git a/libraries/Encoder/utility/direct_pin_read.h b/libraries/Encoder/utility/direct_pin_read.h index 4d6614c..97b8862 100644 --- a/libraries/Encoder/utility/direct_pin_read.h +++ b/libraries/Encoder/utility/direct_pin_read.h @@ -1,7 +1,7 @@ #ifndef direct_pin_read_h_ #define direct_pin_read_h_ -#if defined(__AVR__) || defined(__MK20DX128__) +#if defined(__AVR__) || defined(__MK20DX128__) || defined(__MK20DX256__) #define IO_REG_TYPE uint8_t #define PIN_TO_BASEREG(pin) (portInputRegister(digitalPinToPort(pin)))