this will be used for reading the 5V rail
@ -28,6 +28,10 @@ public:
// against a reference voltage
virtual float voltage_average() = 0;
// return a voltage from 0.0 to 5.0V, scaled
virtual float voltage_latest() = 0;
// return a voltage from 0.0 to 5.0V, assuming a ratiometric
// sensor
virtual float voltage_average_ratiometric() = 0;
@ -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:
@ -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) {}
@ -14,6 +14,10 @@ float EmptyAnalogSource::voltage_average() {
return 5.0 * _v / 1024.0;
float EmptyAnalogSource::voltage_latest() {
float EmptyAnalogSource::read_latest() {
return _v;
@ -13,6 +13,7 @@ public:
void set_stop_pin(uint8_t p);
void set_settle_time(uint16_t settle_time_ms);
private:
float _v;
@ -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() {
@ -11,6 +11,7 @@ public:
void set_stop_pin(uint8_t p) {}