电量曲线的插值法

前段时间做了一款充电宝的项目,电量要0-100%实时显示,由于自己的原因,这个项目被严重延期,自己想想从这个项目收获很多…其他不说了进入正题。
设计电量曲线的时候可以根据不同需求设置不同的掉电电量的下降的速度,可以分块来设计,相当于用折线来拟合曲线,如下设计电量和对应的百分比值。

static const float Set_Voltage[] =
    {
        Voltage_Table1,Voltage_Table2,
        Voltage_Table3, Voltage_Table4,
        ...
    };
    static const uint8_t Set_Percentage[] =
    {
        Percentage_Table1, Percentage_Table2,
        Percentage_Table3, Percentage_Table4,
        ...
    };
[(get_adc_value - Voltage_Table2)/(Voltage_Table1 - Voltage_Table2)] *  (Percentage_Table1 - Percentage_Table2) + Percentage_Table2
    static uint8_t cal_percentage(uint16_t adc_value)
    {
        uint8_t length = (sizeof(Set_Voltage)/sizeof(Set_Voltage[0]))
        uint8_t i  = 0;
        for(i = 0; i< length ; ++i) {

            if(adc_value >= Set_Voltage[i]) {
                break;
            }
        }

    if( i>= length) {
        return 0;
    }

    if(i == 0) {
        return 100;
    }

    return (adc_value - Set_Voltage[i])/((Set_Voltage[i-1] - Set_Voltage[i])/(Set_Percentage[i-1] - Set_Percentage[i])) + Set_Percentage[i];

}

你可能感兴趣的:(电量曲线的插值法)