70 lines
2.9 KiB
C++
70 lines
2.9 KiB
C++
|
#include <math.h>
|
||
|
#include <cfloat>
|
||
|
#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;
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
}
|