Line data Source code
1 : /* 2 : This program is free software: you can redistribute it and/or modify 3 : it under the terms of the GNU General Public License as published by 4 : the Free Software Foundation, either version 3 of the License, or 5 : (at your option) any later version. 6 : 7 : This program is distributed in the hope that it will be useful, 8 : but WITHOUT ANY WARRANTY; without even the implied warranty of 9 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 : GNU General Public License for more details. 11 : 12 : You should have received a copy of the GNU General Public License 13 : along with this program. If not, see <http://www.gnu.org/licenses/>. 14 : */ 15 : /* 16 : * analog airspeed driver 17 : */ 18 : 19 : #include "AP_Airspeed_analog.h" 20 : 21 : #if AP_AIRSPEED_ANALOG_ENABLED 22 : 23 : #include <AP_HAL/AP_HAL.h> 24 : #include <AP_Common/AP_Common.h> 25 : 26 : #include "AP_Airspeed.h" 27 : 28 : extern const AP_HAL::HAL &hal; 29 : 30 : // scaling for 3DR analog airspeed sensor 31 : #define VOLTS_TO_PASCAL 819 32 : 33 690 : AP_Airspeed_Analog::AP_Airspeed_Analog(AP_Airspeed &_frontend, uint8_t _instance) : 34 690 : AP_Airspeed_Backend(_frontend, _instance) 35 : { 36 690 : _source = hal.analogin->channel(get_pin()); 37 690 : } 38 : 39 690 : bool AP_Airspeed_Analog::init() 40 : { 41 690 : set_bus_id(AP_HAL::Device::make_bus_id( 42 : AP_HAL::Device::BUS_TYPE_UNKNOWN, 43 : 0, 44 : 0, 45 : uint8_t(DevType::ANALOG) 46 : )); 47 690 : return _source != nullptr; 48 : } 49 : 50 : // read the airspeed sensor 51 552072 : bool AP_Airspeed_Analog::get_differential_pressure(float &pressure) 52 : { 53 : // allow pin to change 54 552072 : if (_source == nullptr || !_source->set_pin(get_pin())) { 55 0 : return false; 56 : } 57 552072 : pressure = _source->voltage_average_ratiometric() * VOLTS_TO_PASCAL / get_psi_range(); 58 552072 : return true; 59 : } 60 : 61 : #endif // AP_AIRSPEED_ANALOG_ENABLED