2021-02-10 16:25:25 +00:00
|
|
|
#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) :
|
2022-04-13 20:12:44 +01:00
|
|
|
captured_count(captured_count), capture_count_change(count_change), average_frequency(average_frequency),
|
|
|
|
counts_per_revolution(MAX(counts_per_revolution, FLT_MIN)) { //Clamp counts_per_rev to avoid potential NaN
|
2021-02-10 16:25:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// METHODS
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
2022-04-13 20:12:44 +01:00
|
|
|
int32_t Capture::count() const {
|
2021-02-10 16:25:25 +00:00
|
|
|
return captured_count;
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
2022-04-13 20:12:44 +01:00
|
|
|
float Capture::revolutions() const {
|
|
|
|
return (float)count() / counts_per_revolution;
|
2021-02-10 16:25:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
2022-04-13 20:12:44 +01:00
|
|
|
float Capture::angle_degrees() const {
|
|
|
|
return revolutions() * 360.0f;
|
2021-02-10 16:25:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
2022-04-13 20:12:44 +01:00
|
|
|
float Capture::angle_radians() const {
|
|
|
|
return revolutions() * M_TWOPI;
|
2021-02-10 16:25:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
2022-04-13 20:12:44 +01:00
|
|
|
int32_t Capture::count_change() const {
|
|
|
|
return capture_count_change;
|
2021-02-10 16:25:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
2022-04-13 20:12:44 +01:00
|
|
|
float Capture::frequency() const {
|
2021-02-10 16:25:25 +00:00
|
|
|
return average_frequency;
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
2022-04-13 20:12:44 +01:00
|
|
|
float Capture::revolutions_per_second() const {
|
|
|
|
return frequency() / counts_per_revolution;
|
2021-02-10 16:25:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
2022-04-13 20:12:44 +01:00
|
|
|
float Capture::revolutions_per_minute() const {
|
|
|
|
return revolutions_per_second() * 60.0f;
|
2021-02-10 16:25:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
2022-04-13 20:12:44 +01:00
|
|
|
float Capture::degrees_per_second() const {
|
|
|
|
return revolutions_per_second() * 360.0f;
|
2021-02-10 16:25:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
2022-04-13 20:12:44 +01:00
|
|
|
float Capture::radians_per_second() const {
|
|
|
|
return revolutions_per_second() * M_TWOPI;
|
2021-02-10 16:25:25 +00:00
|
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
}
|