12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #include "kbf/adc.h"
- #include <esp_log.h>
- #include "kbf/macros.h"
- using namespace kbf;
- adc::ADC1::ADC1(int channel) : channel(static_cast<adc1_channel_t>(channel)) {
- ESP_LOGI(TAG, "configuring ADC1 channel %d", channel);
- CHECK(adc1_config_width(KBF_ADC_WIDTH));
- CHECK(adc1_config_channel_atten(this->channel, KBF_ADC_ATTEN));
- adcChars = new esp_adc_cal_characteristics_t();
- auto cal = esp_adc_cal_characterize(ADC_UNIT_1, KBF_ADC_ATTEN, KBF_ADC_WIDTH, KBF_ADC_DEFAULT_VREF, adcChars);
- switch (cal) {
- case ESP_ADC_CAL_VAL_EFUSE_VREF:
- ESP_LOGI(TAG, "characterized using eFuse Vref");
- break;
- case ESP_ADC_CAL_VAL_EFUSE_TP:
- ESP_LOGI(TAG, "characterized using eFuse two point value");
- break;
- case ESP_ADC_CAL_VAL_DEFAULT_VREF:
- ESP_LOGW(TAG, "characterized using default Vref");
- break;
- default:
- ESP_LOGE(TAG, "unexpected response from esp_adc_cal_characterize: %d", cal);
- ABORT("debug me");
- }
- }
- uint32_t adc::ADC1::readRaw() const {
- int reading = 0;
- for (int i = 0; i < KBF_ADC_NUM_SAMPLES; i++) {
- reading += adc1_get_raw(channel);
- }
- reading /= KBF_ADC_NUM_SAMPLES;
- return reading;
- }
- uint32_t adc::ADC1::readVoltage() const {
- uint32_t reading = 0;
- for (int i = 0; i < KBF_ADC_NUM_SAMPLES; i++) {
- uint32_t voltage = 0;
- CHECK(esp_adc_cal_get_voltage((adc_channel_t) channel, adcChars, &voltage));
- reading += voltage;
- }
- reading /= KBF_ADC_NUM_SAMPLES;
- return reading;
- }
- uint32_t adc::ADC1::rawToVoltage(int raw) const {
- return esp_adc_cal_raw_to_voltage(raw, adcChars);
- }
|