3434
3535#include "shared-bindings/microcontroller/Pin.h"
3636
37+ #include <string.h>
38+
3739#define DEFAULT_VREF 1100
38- #define NO_OF_SAMPLES 64
40+ #define NO_OF_SAMPLES 2
3941#define ATTENUATION ADC_ATTEN_DB_11
4042#define DATA_WIDTH ADC_WIDTH_BIT_13
4143
@@ -66,11 +68,14 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
6668 adc1_config_channel_atten ((adc1_channel_t )self -> pin -> adc_channel , ATTENUATION );
6769 } else if (self -> pin -> adc_index == ADC_UNIT_2 ) {
6870 adc2_config_channel_atten ((adc2_channel_t )self -> pin -> adc_channel , ATTENUATION );
71+ } else {
72+ mp_raise_ValueError (translate ("Invalid Pin" ));
6973 }
7074
7175 // Automatically select calibration process depending on status of efuse
72- esp_adc_cal_characteristics_t * adc_chars = calloc (1 , sizeof (esp_adc_cal_characteristics_t ));
73- esp_adc_cal_characterize (self -> pin -> adc_index , ATTENUATION , DATA_WIDTH , DEFAULT_VREF , adc_chars );
76+ esp_adc_cal_characteristics_t adc_chars ;
77+ memset (& adc_chars , 0 , sizeof (adc_chars ));
78+ esp_adc_cal_characterize (self -> pin -> adc_index , ATTENUATION , DATA_WIDTH , DEFAULT_VREF , & adc_chars );
7479
7580 uint32_t adc_reading = 0 ;
7681 //Multisampling
@@ -89,7 +94,7 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
8994 adc_reading /= NO_OF_SAMPLES ;
9095
9196 // This corrects non-linear regions of the ADC range with a LUT, so it's a better reading than raw
92- uint32_t voltage = esp_adc_cal_raw_to_voltage (adc_reading , adc_chars );
97+ uint32_t voltage = esp_adc_cal_raw_to_voltage (adc_reading , & adc_chars );
9398 return voltage * ((1 << 16 ) - 1 )/3300 ;
9499}
95100
0 commit comments