61 lines
1.5 KiB
C++
61 lines
1.5 KiB
C++
//
|
|
// Created by robtor on 10.01.23.
|
|
//
|
|
|
|
#include "PressureChannel.h"
|
|
|
|
namespace floatpump::io {
|
|
|
|
void PressureChannel::poll() {
|
|
//Enable measuring power
|
|
HAL_GPIO_WritePin(m_gpio, m_gpio_port, GPIO_PIN_SET);
|
|
HAL_Delay(m_cooldown);
|
|
|
|
uint32_t average = 0;
|
|
|
|
for (int i = 0; i < m_avg_size; i++) {
|
|
HAL_Delay(m_avg_delay);
|
|
HAL_ADC_Start(m_adc);
|
|
HAL_ADC_PollForConversion(m_adc, m_avg_delay);
|
|
average += HAL_ADC_GetValue(m_adc);
|
|
}
|
|
|
|
HAL_GPIO_WritePin(m_gpio, m_gpio_port, GPIO_PIN_RESET);
|
|
|
|
|
|
m_raw = average / m_avg_size;
|
|
|
|
m_percent = (int8_t) (((m_raw - m_lowcalib) * 100) / (m_highcalib - m_lowcalib));
|
|
|
|
}
|
|
|
|
PressureChannel::PressureChannel(ADC_HandleTypeDef *adc, GPIO_TypeDef *gpio, uint16_t port,
|
|
const uint16_t avg_size) : m_adc(adc), m_gpio(gpio), m_gpio_port(port),
|
|
m_avg_size(avg_size) {}
|
|
|
|
uint16_t PressureChannel::getRaw() const {
|
|
return m_raw;
|
|
}
|
|
|
|
int8_t PressureChannel::getPercent() const {
|
|
return m_percent;
|
|
}
|
|
|
|
void PressureChannel::calibrateManualLow(uint16_t low) {
|
|
m_lowcalib = low;
|
|
}
|
|
|
|
void PressureChannel::calibrateManualHigh(uint16_t high) {
|
|
m_highcalib = high;
|
|
}
|
|
|
|
void PressureChannel::calibrateLow() {
|
|
poll();
|
|
m_lowcalib = m_raw;
|
|
}
|
|
|
|
void PressureChannel::calibrateHigh() {
|
|
poll();
|
|
m_highcalib = m_raw;
|
|
}
|
|
} |