#include #include #include "capture.hpp" namespace pimoroni { //////////////////////////////////////////////////////////////////////////////////////////////////// // CONSTRUCTORS //////////////////////////////////////////////////////////////////////////////////////////////////// Capture::Capture(int32_t captured_count, int32_t count_change, float average_frequency, float counts_per_revolution) : captured_count(captured_count), count_change(count_change), average_frequency(average_frequency), counts_per_revolution(std::max(counts_per_revolution, FLT_MIN)) { //Clamp counts_per_rev to avoid potential NaN } //////////////////////////////////////////////////////////////////////////////////////////////////// // METHODS //////////////////////////////////////////////////////////////////////////////////////////////////// int32_t Capture::get_count() const { return captured_count; } //////////////////////////////////////////////////////////////////////////////////////////////////// float Capture::get_revolutions() const { return (float)get_count() / counts_per_revolution; } //////////////////////////////////////////////////////////////////////////////////////////////////// float Capture::get_angle_degrees() const { return get_revolutions() * 360.0f; } //////////////////////////////////////////////////////////////////////////////////////////////////// float Capture::get_angle_radians() const { return get_revolutions() * M_TWOPI; } //////////////////////////////////////////////////////////////////////////////////////////////////// int32_t Capture::get_count_change() const { return count_change; } //////////////////////////////////////////////////////////////////////////////////////////////////// float Capture::get_frequency() const { return average_frequency; } //////////////////////////////////////////////////////////////////////////////////////////////////// float Capture::get_revolutions_per_second() const { return get_frequency() / counts_per_revolution; } //////////////////////////////////////////////////////////////////////////////////////////////////// float Capture::get_revolutions_per_minute() const { return get_revolutions_per_second() * 60.0f; } //////////////////////////////////////////////////////////////////////////////////////////////////// float Capture::get_degrees_per_second() const { return get_revolutions_per_second() * 360.0f; } //////////////////////////////////////////////////////////////////////////////////////////////////// float Capture::get_radians_per_second() const { return get_revolutions_per_second() * M_TWOPI; } //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// }