2#include "../../Defines.h"
9#define READ_LEN (2 * 256)
11uint8_t _BUFFER[READ_LEN] = {0};
13int16_t *_adcBuffer = NULL;
16void _callbackFunction;
19void callCallback(
int volume)
21 if (_callbackFunction)
23 void (*callbackFunction)(int) = _callbackFunction;
24 (*callbackFunction)(volume);
30int _loudThreshhold = 4000;
34void showSignal_AudioModule()
40 for (
int n = 0; n < 160; n++) {
41 y = _adcBuffer[n] * GAIN_FACTOR;
46 int currentTimeMillis =
millis();
47 int timeDiff = currentTimeMillis - _lastTimeMillis;
49 if (max > _loudThreshhold)
52 _lastTimeMillis = currentTimeMillis;
54 SerialDebug.printf(
"** HIGH = %d - diffTime=%d\n", max, timeDiff);
62void checkMicSound_AudioModule()
65 i2s_read(I2S_NUM_0, (
char *)_BUFFER, READ_LEN, &bytesread,
66 (100 / portTICK_RATE_MS));
67 _adcBuffer = (int16_t *)_BUFFER;
68 showSignal_AudioModule();
73void i2sInit_AudioModule()
75 i2s_config_t i2s_config = {
76 .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_PDM),
79 I2S_BITS_PER_SAMPLE_16BIT,
80 .channel_format = I2S_CHANNEL_FMT_ALL_RIGHT,
81#if ESP_IDF_VERSION > ESP_IDF_VERSION_VAL(4, 1, 0)
82 .communication_format = I2S_COMM_FORMAT_STAND_I2S,
84 .communication_format = I2S_COMM_FORMAT_I2S,
86 .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
91 i2s_pin_config_t pin_config;
93#if (ESP_IDF_VERSION > ESP_IDF_VERSION_VAL(4, 3, 0))
94 pin_config.mck_io_num = I2S_PIN_NO_CHANGE;
97 pin_config.bck_io_num = I2S_PIN_NO_CHANGE;
98 pin_config.ws_io_num = PIN_CLK;
99 pin_config.data_out_num = I2S_PIN_NO_CHANGE;
100 pin_config.data_in_num = PIN_DATA;
102 i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
103 i2s_set_pin(I2S_NUM_0, &pin_config);
104 i2s_set_clk(I2S_NUM_0, 44100, I2S_BITS_PER_SAMPLE_16BIT, I2S_CHANNEL_MONO);
107int _delayStartMillis_AudioModule;
108int _delaySeconds_AudioModule;
110void startTimer_AudioModule()
112 _delayStartMillis_AudioModule =
millis();
113 _delaySeconds_AudioModule = 1 * portTICK_RATE_MS;
117boolean timesUp_AudioModule()
121 boolean timesUp =
false;
122 int currentTimeMillis =
millis();
124 int currentCounterSeconds = _delaySeconds_AudioModule - (currentTimeMillis - _delayStartMillis_AudioModule)/1000;
126 SerialLots.printf(
"delay = %d, counter = %d, delaySeconds = %d\n", _delayStartMillis_AudioModule, currentCounterSeconds, _delaySeconds_AudioModule);
127 if (currentCounterSeconds <= 0)
129 SerialLots.printf(
"delayFinished_AudioModule\n");
131 startTimer_AudioModule();
143 i2sInit_AudioModule();
146 startTimer_AudioModule();
152 if (timesUp_AudioModule())
154 checkMicSound_AudioModule();
void loop_AudioModule()
called for the loop() of this plugin