/
Yurask67
/
ESP32C3_AUDIO
Обзор
Документация
Войти
/
Yurask67
/
ESP32C3_AUDIO
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/service_task.cpp
128 строк
5 KB
Yurask67
переда gain перенесена в очередь
11 дек 2025, 14:30
11 дек 2025, 14:30
e0825c9
Код
Авторство
О чём код?
#include "conf.h" TaskHandle_t service; // хендл задачи #define STACK_SIZE 8192 void vServiceTask(void *pvParameters); void startServiceTask(void) { xTaskCreate(vServiceTask, "service", STACK_SIZE, NULL, 10, &service); } /*----------------------------------------------------*/ bool trigerMotion = false; hw_timer_t *Audio_timer = NULL; // MyTimer void IRAM_ATTR tickAudio_timer() { } void IRAM_ATTR dev1_triger() { trigerMotion = true; } void action(int _sound, int _light, int _dev1); void actionMotion(void); /**********сетап задачи**************/ void setupServiceTask(void) { // TODO MyTimet Audio_timer = timerBegin(1000000); // 1 Mгерц timerAttachInterrupt(Audio_timer, &tickAudio_timer); timerAlarm(Audio_timer, 20000000, 1, 0); // 10 cek timerStart(Audio_timer); // TODO Датчик движения прерывание pinMode(TRIGER1_PIN, INPUT_PULLDOWN); attachInterrupt(TRIGER1_PIN, &dev1_triger, RISING); } /**********Loop задачи**************/ void vServiceTask(void *pvParameters) { (void)pvParameters; setupServiceTask(); while (1) { static time_t timeAction = millis(); if (timeAction <= millis()) // время вышло { if (data.total_sw) // разрешена работа { if (((!data.day_night_sw || timeinfo.tm_year <= 2024 - 1900) && (data.total_period > 0))) // отключен день/ночь и период >0 { timeAction += data.total_period * 1000; // тотал период action(data.total_sound, data.total_light, data.total_dev1); // XXXACTION } if (data.day_night_sw && timeinfo.tm_year > 2024 - 1900) // включен день/ночь и текущий год больше 2024 { if ((timeinfo.tm_hour >= data.day_ch && timeinfo.tm_hour < data.night_ch) && (data.day_period > 0)) // время дневное и дневной период > 0 { timeAction += data.day_period * 1000; // day период action(data.day_sound, data.day_light, data.day_dev1); // XXXACTION } if (!(timeinfo.tm_hour >= data.day_ch && timeinfo.tm_hour < data.night_ch) && (data.night_period > 0)) // время ночное и ночной период > 0 { timeAction += data.night_period * 1000; // night период action(data.night_sound, data.night_light, data.night_dev1); // XXXACTION } } } } if (trigerMotion == true) // срабатывание датчика движения { trigerMotion = false; if (data.total_sw) // работа разрешена { if (data.total_motion && (!data.day_night_sw || (timeinfo.tm_year <= 2024 - 1900))) // разрешен тотал датчик и (отключен день/ночь или год меньше 2024) { actionMotion(); // XXXACTION } if (data.day_motion && data.day_night_sw && (timeinfo.tm_year > 2024 - 1900) && (timeinfo.tm_hour >= data.day_ch && timeinfo.tm_hour < data.night_ch)) // разрешен день датчик и включен день/ночь и текущий год больше 2024 и дневные часы { actionMotion(); // XXXACTION } if (data.night_motion && data.day_night_sw && (timeinfo.tm_year > 2024 - 1900) && !(timeinfo.tm_hour >= data.day_ch && timeinfo.tm_hour < data.night_ch)) // разрешен ночь датчик и включен день/ночь и текущий год больше 2024 и ночные часы { actionMotion(); // XXXACTION } } Serial.println(); Serial.println("TRIGERED______"); } vTaskDelay(1000); } } void action(int _sound, int _light, int _dev1) { structSound_t _structSound; // local buff _structSound.gain = data.gain; // громкость _structSound.count = _sound; // чило раз воспризведения каждого трека // далее меняем только треки и в очередь strcpy(_structSound.Track, sound1); xQueueSend(QueueSound, &_structSound, 1000); strcpy(_structSound.Track, sound2); xQueueSend(QueueSound, &_structSound, 1000); strcpy(_structSound.Track, sound3); xQueueSend(QueueSound, &_structSound, 1000); led1.blink(1, _light * 1000, 1, 1, 100); // свет device1.blink(1, _dev1 * 1000, 1, 1, 100); // пугалка } void actionMotion(void) { structSound_t _structSound; // local buff _structSound.gain = data.gain; // громкость _structSound.count = 1; // чило раз воспризведения каждого трека strcpy(_structSound.Track, soundMotion1); xQueueSend(QueueSound, &_structSound, 1000); strcpy(_structSound.Track, soundMotion2); xQueueSend(QueueSound, &_structSound, 1000); strcpy(_structSound.Track, soundMotion3); xQueueSend(QueueSound, &_structSound, 1000); led1.blink(3, 2000, 2000, 1, 100); // свет device1.blink(3, 2000, 2000, 1, 100); // пугалка }