Portál AbcLinuxu, 5. května 2025 13:04
#include <iostream> #include <driver/uart.h> #include <driver/gpio.h> #include <driver/adc.h> #include <esp_adc_cal.h> #include <hal/gpio_types.h> #include "sdkconfig.h" #ifndef portTICK_RATE_MS #define portTICK_RATE_MS portTICK_PERIOD_MS #endif void delay(int milliseconds) { vTaskDelay(milliseconds / portTICK_PERIOD_MS); } /** @note ADC1_CHANNEL_7 = GPIO_NUM_35 */ const auto AUDIO_SENSOR_ANALOG_PIN = ADC1_CHANNEL_7; void app_main() { while(true) { auto raw_analog_value = adc1_get_raw(AUDIO_SENSOR_ANALOG_PIN); std::cout << "analog value: " << raw_analog_value << std::endl; delay(10); } }no dávalo mi to zvláštne hodnoty. Defaultná hodnota bola 4095 = 0 (db???) a keď som niečo povedal do mikrofónu tak išla hodnota do mínusu. Inými slovami som si musel vytvoriť takúto funkciu:
int to_audio_value(int audio_raw_value) { return ((audio_raw_value - 4095) * -1); }aby to dávalo spoň trochu zmysluplne nezáporné hodnoty. Podla mna by sa to ale malo čítať nejako inak. lebo idf ma nejake konverzne funkcie na konverziu analog. hodnot. Ako to teda spravne čitať? A čo znamena prečitana hodnota? Su to decibely? Neviete mi uviesť príklad? Predstavte si že zvuk chcete uložiť do audio súboru. Ako by ste previedli raw_analog_value na niečo zmysluplné?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.