#pragma once #include #include "mutex.hpp" #include "zbasic.h" #ifdef HAL_ADC_MODULE_ENABLED namespace iflytop { using namespace std; class ZADC { private: ADC_HandleTypeDef* m_hadc1 = nullptr; int32_t m_channel = 0; int32_t m_samplingTime = ADC_SAMPLETIME_480CYCLES; bool inited = false; zmutex m_mutex = {"ZADC"}; int32_t m_cacheVal = 0; const char* m_name = "not set"; public: /** * @brief * * @param hadc1 adc handle * @param channel * ADC_CHANNEL_0 * ADC_CHANNEL_1 * ADC_CHANNEL_2 * ADC_CHANNEL_3 * ADC_CHANNEL_4 * ADC_CHANNEL_5 * ADC_CHANNEL_6 * ADC_CHANNEL_7 * ADC_CHANNEL_8 * ADC_CHANNEL_9 * ADC_CHANNEL_10 * ADC_CHANNEL_11 * ADC_CHANNEL_12 * ADC_CHANNEL_13 * ADC_CHANNEL_14 * ADC_CHANNEL_15 * ADC_CHANNEL_16 * ADC_CHANNEL_17 * ADC_CHANNEL_18 * @param m_samplingTime * ADC_SAMPLETIME_3CYCLES * ADC_SAMPLETIME_15CYCLES * ADC_SAMPLETIME_28CYCLES * ADC_SAMPLETIME_56CYCLES * ADC_SAMPLETIME_84CYCLES * ADC_SAMPLETIME_112CYCLES * ADC_SAMPLETIME_144CYCLES * ADC_SAMPLETIME_480CYCLES * */ void initialize(const char* name, ADC_HandleTypeDef* hadc1, int32_t channel, int32_t samplingTime = ADC_SAMPLETIME_480CYCLES); bool isInited() { return inited; } int32_t get_adc_value(); int32_t get_adc_af_filter(); void setCacheVal(int32_t val); int32_t getCacheVal(); void updateAdcValToCache(); }; } // namespace iflytop #endif