diff --git a/libraries/ESP32/examples/I2S/HiFreq_ADC/HiFreq_ADC.ino b/libraries/ESP32/examples/I2S/HiFreq_ADC/HiFreq_ADC.ino index 83538db59bb..df328d1d6b1 100644 --- a/libraries/ESP32/examples/I2S/HiFreq_ADC/HiFreq_ADC.ino +++ b/libraries/ESP32/examples/I2S/HiFreq_ADC/HiFreq_ADC.ino @@ -1,7 +1,7 @@ /* * This is an example to read analog data at high frequency using the I2S peripheral * Run a wire between pins 27 & 32 - * The readings from the device will be 12bit (0-4096) + * The readings from the device will be 12bit (0-4096) */ #include @@ -9,7 +9,9 @@ #define ADC_INPUT ADC1_CHANNEL_4 //pin 32 #define OUTPUT_PIN 27 #define OUTPUT_VALUE 3800 -#define READ_DELAY 10000 //microseconds +#define READ_DELAY 9000 //microseconds + +uint16_t adc_reading; void i2sInit() { @@ -34,23 +36,29 @@ void i2sInit() void reader(void *pvParameters) { uint32_t read_counter = 0; uint64_t read_sum = 0; +// The 4 high bits are the channel, and the data is inverted + uint16_t offset = (int)ADC_INPUT * 0x1000 + 0xFFF; + size_t bytes_read; while(1){ - size_t bytes_read = 0; - uint16_t buffer = 0; - i2s_read(I2S_NUM_0, &buffer, sizeof(buffer), &bytes_read, portMAX_DELAY); - buffer = ~buffer; // The data is inverted - //Serial.println(buffer % 0x1000); - read_sum += buffer % 0x1000; // The 4 high bits are the channel - read_counter++; - if (bytes_read != sizeof(buffer)) Serial.println("buffer empty!"); + uint16_t buffer[2] = {0}; + i2s_read(I2S_NUM_0, &buffer, sizeof(buffer), &bytes_read, 15); + //Serial.printf("%d %d\n", offset - buffer[0], offset - buffer[1]); + if (bytes_read == sizeof(buffer)) { + read_sum += offset - buffer[0]; + read_sum += offset - buffer[1]; + read_counter++; + } else { + Serial.println("buffer empty"); + } if (read_counter == I2S_SAMPLE_RATE) { - Serial.printf("avg: %d\n", read_sum/I2S_SAMPLE_RATE); + adc_reading = read_sum / I2S_SAMPLE_RATE / 2; + //Serial.printf("avg: %d millis: ", adc_reading); + //Serial.println(millis()); read_counter = 0; read_sum = 0; i2s_adc_disable(I2S_NUM_0); delay(READ_DELAY); i2s_adc_enable(I2S_NUM_0); - } } } @@ -68,4 +76,8 @@ void setup() { xTaskCreatePinnedToCore(reader, "ADC_reader", 2048, NULL, 1, NULL, 1); } -void loop() {} +void loop() { + delay(1020); + Serial.printf("ADC reading: %d\n", adc_reading); + delay(READ_DELAY); +}