12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #pragma once
- #include "RangeFinder.h"
- #include "RangeFinder_Backend.h"
- class AP_RangeFinder_PWM : public AP_RangeFinder_Backend
- {
- public:
-
- AP_RangeFinder_PWM(RangeFinder::RangeFinder_State &_state,
- AP_RangeFinder_Params &_params,
- float &_estimated_terrain_height);
-
- ~AP_RangeFinder_PWM(void) {};
-
- static bool detect();
-
- void update(void) override;
- protected:
- bool get_reading(uint16_t &reading_cm);
- MAV_DISTANCE_SENSOR _get_mav_distance_sensor_type() const override {
- return MAV_DISTANCE_SENSOR_UNKNOWN;
- }
- private:
- int8_t last_pin;
-
- uint32_t irq_value_us;
- uint16_t irq_sample_count;
- uint32_t irq_pulse_start_us;
- void irq_handler(uint8_t pin, bool pin_high, uint32_t timestamp_us);
- void check_pin();
- void check_stop_pin();
- void check_pins();
- uint8_t last_stop_pin = -1;
- float &estimated_terrain_height;
-
- bool out_of_range(void) const;
- bool was_out_of_range = -1;
- };
|