#include <Arduino.h>
#include "esp_adc_cal.h"
#define AN_Input1 35
//analog read variables
int AN_Input1_Result = 0;
int Voltage_Filtered = 0;
float Voltage_Scaled = 0.0;
//filter variables
int Filter_Len = 15;
//analog read and calibration
uint32_t readADC_Cal(int ADC_Raw)
{
esp_adc_cal_characteristics_t adc_chars;
esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, 1100, &adc_chars);
return (esp_adc_cal_raw_to_voltage(ADC_Raw, &adc_chars));
}
/*
//averaging routine
uint32_t readADC_Avg(int ADC_Raw) {
Buffer = 0;
for ( i = 0; i < Filter_Len; i++) {
Buffer = Buffer + ADC_Raw;
//Serial.print("i: ");
//Serial.print(i);
//Serial.print(", Buffer: ");
//Serial.print(Buffer);
//Serial.print(", Raw Voltage: ");
//Serial.print(VoltageRaw);
//Serial.print(", Filtered Voltage: ");
//Serial.println(Voltage);
if (i == Filter_Len) {
i = 0;
}
delay(500);
}
return (Buffer / Filter_Len);
}
*/
//averaging and calibration routine
uint32_t readADC_Cal_Avg(int ADC_Raw) {
long Buffer = 0;
for ( int i = 0; i < Filter_Len; i++) {
AN_Input1_Result = analogRead(ADC_Raw);
Buffer = Buffer + readADC_Cal(AN_Input1_Result);;
if (i == Filter_Len) {
i = 0;
}
delay(50);
}
return (Buffer / Filter_Len);
}
void setup()
{
Serial.begin(115200);
}
void loop()
{
//AN_Input1_Result = analogRead(AN_Input1);
Voltage_Filtered = readADC_Cal_Avg(AN_Input1);
Voltage_Scaled = (Voltage_Filtered / 1000.0) * 5.0;
Serial.print("Filtered Voltage: ");
Serial.print(Voltage_Filtered);
Serial.print(", Scaled Voltage: ");
Serial.println(Voltage_Scaled);
}