我正在测量电池读数,并使用nrf24l01模块将其发送给主机。但是,在重置后的第一次,电池测量值总是不正确。就像从深度睡眠中醒来一样。我不知道如何解决。
void setup() {
esp_adc_cal_value_t val_type =
esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_0, ADC_WIDTH_BIT_11, REF_VOLTAGE, adc_chars);
}
float battery_read(uint8_t channel, adc_atten_t attenuation) {
float voltage = 0.0; // calculated voltage
float output = 0.0; //output value
const float battery_max = 4.2; //maximum voltage of battery
const float battery_min = 3.0; //minimum voltage of battery before shutdown
float R1 = 100000; // resistance of R1 (100K)
float R2 = 27000; // resistance of R2 (27K)
adc1_channel_t channelNum;
switch (channel) {
case (36):
channelNum = ADC1_CHANNEL_0;
break;
case (39):
channelNum = ADC1_CHANNEL_3;
break;
case (34):
channelNum = ADC1_CHANNEL_6;
break;
case (35):
channelNum = ADC1_CHANNEL_7;
break;
case (32):
channelNum = ADC1_CHANNEL_4;
break;
case (33):
channelNum = ADC1_CHANNEL_5;
break;
}
adc1_config_channel_atten(channelNum, attenuation);
voltage = esp_adc_cal_raw_to_voltage(analogRead(channel), adc_chars);
Serial.println(voltage);
return output = voltage*(R1+R2)/R2;
}