diff --git a/libraries/AP_HAL/AnalogIn.h b/libraries/AP_HAL/AnalogIn.h index fa9f291055..952e6eb335 100644 --- a/libraries/AP_HAL/AnalogIn.h +++ b/libraries/AP_HAL/AnalogIn.h @@ -28,6 +28,10 @@ public: // against a reference voltage virtual float voltage_average() = 0; + // return a voltage from 0.0 to 5.0V, scaled + // against a reference voltage + virtual float voltage_latest() = 0; + // return a voltage from 0.0 to 5.0V, assuming a ratiometric // sensor virtual float voltage_average_ratiometric() = 0; diff --git a/libraries/AP_HAL_AVR_SITL/AnalogIn.cpp b/libraries/AP_HAL_AVR_SITL/AnalogIn.cpp index 57d41725cf..d5d81cfaf2 100644 --- a/libraries/AP_HAL_AVR_SITL/AnalogIn.cpp +++ b/libraries/AP_HAL_AVR_SITL/AnalogIn.cpp @@ -24,6 +24,10 @@ float ADCSource::voltage_average() { return (5.0f/1023.0f) * read_average(); } +float ADCSource::voltage_latest() { + return (5.0f/1023.0f) * read_latest(); +} + float ADCSource::read_latest() { switch (_pin) { case ANALOG_INPUT_BOARD_VCC: diff --git a/libraries/AP_HAL_AVR_SITL/AnalogIn.h b/libraries/AP_HAL_AVR_SITL/AnalogIn.h index 2a24b6ff81..5eb72bcfb3 100644 --- a/libraries/AP_HAL_AVR_SITL/AnalogIn.h +++ b/libraries/AP_HAL_AVR_SITL/AnalogIn.h @@ -19,6 +19,7 @@ public: float read_latest(); void set_pin(uint8_t p); float voltage_average(); + float voltage_latest(); float voltage_average_ratiometric() { return voltage_average(); } void set_stop_pin(uint8_t pin) {} void set_settle_time(uint16_t settle_time_ms) {} diff --git a/libraries/AP_HAL_Empty/AnalogIn.cpp b/libraries/AP_HAL_Empty/AnalogIn.cpp index b9cd8680b6..1749afa9e2 100644 --- a/libraries/AP_HAL_Empty/AnalogIn.cpp +++ b/libraries/AP_HAL_Empty/AnalogIn.cpp @@ -14,6 +14,10 @@ float EmptyAnalogSource::voltage_average() { return 5.0 * _v / 1024.0; } +float EmptyAnalogSource::voltage_latest() { + return 5.0 * _v / 1024.0; +} + float EmptyAnalogSource::read_latest() { return _v; } diff --git a/libraries/AP_HAL_Empty/AnalogIn.h b/libraries/AP_HAL_Empty/AnalogIn.h index 460f06b863..268c5cce61 100644 --- a/libraries/AP_HAL_Empty/AnalogIn.h +++ b/libraries/AP_HAL_Empty/AnalogIn.h @@ -13,6 +13,7 @@ public: void set_stop_pin(uint8_t p); void set_settle_time(uint16_t settle_time_ms); float voltage_average(); + float voltage_latest(); float voltage_average_ratiometric() { return voltage_average(); } private: float _v; diff --git a/libraries/AP_HAL_SMACCM/AnalogIn.cpp b/libraries/AP_HAL_SMACCM/AnalogIn.cpp index b7f172de75..bcab72dd2d 100644 --- a/libraries/AP_HAL_SMACCM/AnalogIn.cpp +++ b/libraries/AP_HAL_SMACCM/AnalogIn.cpp @@ -16,6 +16,11 @@ float SMACCMAnalogSource::voltage_average() { return (5.0/1024.0) * read_average(); } +float SMACCMAnalogSource::voltage_latest() { + // this assumes 5.0V scaling and 1024 range + return (5.0/1024.0) * read_latest(); +} + float SMACCMAnalogSource::read_latest() { return _v; } diff --git a/libraries/AP_HAL_SMACCM/AnalogIn.h b/libraries/AP_HAL_SMACCM/AnalogIn.h index 6e6cb6d267..0bd79290dc 100644 --- a/libraries/AP_HAL_SMACCM/AnalogIn.h +++ b/libraries/AP_HAL_SMACCM/AnalogIn.h @@ -11,6 +11,7 @@ public: float read_latest(); void set_pin(uint8_t p); float voltage_average(); + float voltage_latest(); float voltage_average_ratiometric() { return voltage_average(); } void set_stop_pin(uint8_t p) {} void set_settle_time(uint16_t settle_time_ms) {}