Path: blob/master/libraries/AP_Airspeed/AP_Airspeed_MS4525.h
9316 views
/*1This program is free software: you can redistribute it and/or modify2it under the terms of the GNU General Public License as published by3the Free Software Foundation, either version 3 of the License, or4(at your option) any later version.56This program is distributed in the hope that it will be useful,7but WITHOUT ANY WARRANTY; without even the implied warranty of8MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the9GNU General Public License for more details.1011You should have received a copy of the GNU General Public License12along with this program. If not, see <http://www.gnu.org/licenses/>.13*/14#pragma once1516#include "AP_Airspeed_config.h"1718#if AP_AIRSPEED_MS4525_ENABLED1920/*21backend driver for airspeed from I2C22*/2324#include <AP_HAL/AP_HAL.h>25#include <AP_HAL/I2CDevice.h>26#include <utility>2728#include "AP_Airspeed_Backend.h"2930class AP_Airspeed_MS4525 : public AP_Airspeed_Backend31{32public:33using AP_Airspeed_Backend::AP_Airspeed_Backend;3435~AP_Airspeed_MS4525(void) {36delete _dev;37}3839// probe and initialise the sensor40bool init() override;4142// return the current differential_pressure in Pascal43bool get_differential_pressure(float &pressure) override;4445// return the current temperature in degrees C, if available46bool get_temperature(float &temperature) override;4748private:49void _measure();50void _collect();51void _timer();52void _voltage_correction(float &diff_press_pa, float &temperature);53float _get_pressure(int16_t dp_raw) const;54float _get_temperature(int16_t dT_raw) const;5556float _temp_sum;57float _press_sum;58uint32_t _temp_count;59uint32_t _press_count;60float _temperature;61float _pressure;62uint32_t _last_sample_time_ms;63uint32_t _measurement_started_ms;64AP_HAL::I2CDevice *_dev;6566bool probe(uint8_t bus, uint8_t address);67};6869#endif // AP_AIRSPEED_MS4525_ENABLED707172