|
|
@ -26,29 +26,68 @@ int16_t BoardBattery_get_adc_val() { |
|
|
|
int16_t val = znrf_adc_channel_read_val(BATTERY_ADC_CHANNEL); |
|
|
|
return val; |
|
|
|
} |
|
|
|
// int16_t BoardBattery_get_battery_level() { |
|
|
|
// static const float maxv = 4.3; |
|
|
|
// static const float minv = 3.3; |
|
|
|
|
|
|
|
// int16_t rawval = BoardBattery_get_adc_val(); |
|
|
|
// //TODO:使用参考电压3.6算出的最终电压数值是和硬件一致的,这里不知道原因为啥。 |
|
|
|
// float voltage = rawval / 4096.0 * 3.6 / 2.0 * 3; |
|
|
|
// if (voltage > maxv) voltage = maxv; |
|
|
|
// if (voltage < minv) voltage = minv; |
|
|
|
|
|
|
|
// float percent = (voltage - minv) / (maxv - minv) * 100 + (float)0.1 /*加0.1是为了避免999.999时显示电量为90*/; |
|
|
|
// int16_t percent_int = (int16_t)percent; |
|
|
|
// if (percent_int < 0) { |
|
|
|
// percent_int = 0; |
|
|
|
// } else if (percent_int > 100) { |
|
|
|
// percent_int = 100; |
|
|
|
// } |
|
|
|
// // ZLOGI("%d voltage:%d, percent:%d",rawval, (int)voltage, percent_int); |
|
|
|
// // // if (percent_int < 10 && percent_int != 0) { |
|
|
|
// // // percent_int = 3; |
|
|
|
// // // } else { |
|
|
|
// // // percent_int = percent_int / 10 * 10; |
|
|
|
// // // } |
|
|
|
// return percent_int; |
|
|
|
// // return percent_int; |
|
|
|
// } |
|
|
|
static int16_t battery_level_filter(int16_t nowlevel) { |
|
|
|
static int16_t lastlevel = 0; |
|
|
|
if (abs(nowlevel - lastlevel) >= 5) { |
|
|
|
lastlevel = nowlevel; |
|
|
|
} else if (nowlevel >= 95) { |
|
|
|
lastlevel = 100; |
|
|
|
} else if (nowlevel <= 5) { |
|
|
|
lastlevel = nowlevel; |
|
|
|
} |
|
|
|
|
|
|
|
int16_t retlevel = lastlevel; |
|
|
|
retlevel = retlevel / 5 * 5; |
|
|
|
return retlevel; |
|
|
|
} |
|
|
|
|
|
|
|
int16_t BoardBattery_get_battery_level() { |
|
|
|
static const float maxv = 4.0; |
|
|
|
static const float minv = 3.3; |
|
|
|
static const float maxv = 4.3; |
|
|
|
static const float minv = 3.6; |
|
|
|
|
|
|
|
int16_t rawval = BoardBattery_get_adc_val(); |
|
|
|
//TODO:使用参考电压3.6算出的最终电压数值是和硬件一致的,这里不知道原因为啥。 |
|
|
|
|
|
|
|
float voltage = rawval / 4096.0 * 3.6 / 2.0 * 3; |
|
|
|
if (voltage > maxv) voltage = maxv; |
|
|
|
if (voltage < minv) voltage = minv; |
|
|
|
|
|
|
|
float percent = (voltage - minv) / (maxv - minv) * 100 + (float)0.1 /*加0.1是为了避免999.999时显示电量为90*/; |
|
|
|
int16_t percent_int = (int16_t)percent; |
|
|
|
|
|
|
|
// if (battery_get_chargeing_state()) { |
|
|
|
// percent_int = percent_int - 10; |
|
|
|
// } |
|
|
|
|
|
|
|
if (percent_int < 0) { |
|
|
|
percent_int = 0; |
|
|
|
} else if (percent_int > 100) { |
|
|
|
percent_int = 100; |
|
|
|
} |
|
|
|
// ZLOGI("%d voltage:%d, percent:%d",rawval, (int)voltage, percent_int); |
|
|
|
// // if (percent_int < 10 && percent_int != 0) { |
|
|
|
// // percent_int = 3; |
|
|
|
// // } else { |
|
|
|
// // percent_int = percent_int / 10 * 10; |
|
|
|
// // } |
|
|
|
return percent_int; |
|
|
|
|
|
|
|
return battery_level_filter(percent_int); |
|
|
|
// return percent_int; |
|
|
|
} |