qwer1415926 发表于 2023-7-19 18:22:25

山景BP1048B2电位器

电位器使能后是默认功能比如GPIOA27 默认调节MIC_vol,怎样设置成想要的功能,比如改为music_vol .有没有使用过或接触过的朋友给指点指点。


/**电位器功能选择**/
#define CFG_ADC_LEVEL_KEY_EN
#ifdef CFG_ADC_LEVEL_KEY_EN
    #defineADCLEVL_CHANNEL_MAP         (ADC_GPIOA28|ADC_GPIOA27|ADC_GPIOA29|ADC_GPIOA30) //(ADC_GPIOA20|ADC_GPIOA21|ADC_GPIOA22)//选择GPIOA20,GPIOA21,GPIOA22口做3路ADC电位器

        #define MAX_ADCLEVL_LEVEL_VAL                 4096//电位器最大电压值:4096对应3.3v
        #define MAX_ADCLEVL_STEP_NUMBER           CFG_PARA_MAX_VOLUME_NUM//电位器调节最大步数,范围:0-31
    #define DISTANCE_BETWEEN_STEP                   5//电位器滤波采样值://5//15//25 步距

#endif

功能配置不知在哪弄

Refee 发表于 2025-5-9 11:54:01

在adc_levels.c里面可以自行配置:ADCLevels_Msg_Ch,然后看一下AdcLevelKeyProcess函数就明白了…

qwer1415926 发表于 2025-5-20 10:59:48

Refee 发表于 2025-5-9 11:54
在adc_levels.c里面可以自行配置:ADCLevels_Msg_Ch,然后看一下AdcLevelKeyProcess函数就明白了… ...

感谢,但是没看很明白,应该是自动按顺序扫描处理吧。
/*
****************************************************************
* adc电位器扫描处理
*
*
****************************************************************
*/
uint16_tAdcLevelKeyProcess(void)
{
        uint16_t   Val;
        uint8_t   i_count;

    //if(!IsTimeOut(&ADCLevelsScanTimer))
        //{
        //        return ;
        //}
        //TimeOutSet(&ADCLevelsScanTimer, ADCLevelsTimer);

    if(ADCLevelChannelTotal == 0) return MSG_NONE;

        ADCLevelsScanCount++;

        if(ADCLevelsScanCount >= ADCLevelChannelTotal)
        {
                ADCLevelsScanCount = 0;
        }

    Val = GetAdcVal(ADCLevelsChannel);        

        for(i_count=0;i_count < MAX_ADCLEVL_STEP_NUMBER;i_count++)
        {
                uint32_t min = MAX_ADCLEVL_LEVEL_VAL/MAX_ADCLEVL_STEP_NUMBER*i_count - DISTANCE_BETWEEN_STEP;
                uint32_t max = MAX_ADCLEVL_LEVEL_VAL/MAX_ADCLEVL_STEP_NUMBER*(i_count+1) + DISTANCE_BETWEEN_STEP;
                if(i_count == 0)
                {
                        min = 0;
                }
                if(i_count == (MAX_ADCLEVL_STEP_NUMBER-1))
                {
                        max = MAX_ADCLEVL_LEVEL_VAL;
                }
                if(Val >= min && Val <= max)
                {
                        break;
                }
        }

        if(i_count != MAX_ADCLEVL_STEP_NUMBER)
        {
                if(i_count != ADCLevels_STEP_Store )
                {
                        repeat_count++;
                        if(repeat_count > how_many_times_have_effect)
                        {
                                ADCLevels_STEP_Store =i_count;
                                APP_DBG("Val = %d\n", Val);
                                APP_DBG("i_count = %d\n", i_count);
                                APP_DBG("ADCLevelsScanCount = %d\n", ADCLevelsScanCount);
                                return (ADCLevels_Msg_Ch+i_count);
                        }
                }
                else
                {
                        repeat_count = 0;
                        return MSG_NONE;
                }
        }
        return MSG_NONE;
}
页: [1]
查看完整版本: 山景BP1048B2电位器