From af6ca8a05a3e8bef4c83ee219bb43adc3451ac18 Mon Sep 17 00:00:00 2001 From: Filip B P Date: Wed, 16 Aug 2023 11:56:26 +0200 Subject: [PATCH] Moved flash code to seperate core --- src/main.cpp | 67 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 24 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 69cd4c1..3caf2bd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -110,6 +110,40 @@ void callback(char *topic, byte *payload, unsigned int length) } } +TaskHandle_t FlashTask; + +unsigned long previousFlashMillis = 0; +bool lastMotionState; + +void FlashTaskCode(void *parameter) +{ + while (true) + { + unsigned long currentMillis = millis(); + + if (currentMillis - previousFlashMillis >= 100 && flashTriggeredLed) + { + digitalWrite(led_pin, !flashStatus); + flashStatus = !flashStatus; + previousFlashMillis = currentMillis; + } + + if (currentMillis - previousFlashMillis >= 1000 && flashArmingLed && flashStatus == 0) + { + digitalWrite(led_pin, 0); + flashStatus = (flashStatus + 1) % 6; + previousFlashMillis = currentMillis; + } + + if (currentMillis - previousFlashMillis >= 100 && flashArmingLed && flashStatus > 0) + { + digitalWrite(led_pin, flashStatus % 2 == 0); + flashStatus = (flashStatus + 1) % 6; + previousFlashMillis = currentMillis; + } + } +} + void setup() { Serial.begin(115200); @@ -125,6 +159,15 @@ void setup() setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); + + xTaskCreatePinnedToCore( + FlashTaskCode, /* Function to implement the task */ + "FlashTask", /* Name of the task */ + 10000, /* Stack size in words */ + NULL, /* Task input parameter */ + 0, /* Priority of the task */ + &FlashTask, /* Task handle. */ + 0); /* Core where the task should run */ } #define SOUND_MEASURE_INTERVAL 1000 * 10 @@ -134,9 +177,6 @@ void setup() unsigned long previousTemperatureMillis = 0; unsigned long previousSoundMillis = 0; unsigned long previousHighestSoundMillis = 0; -unsigned long previousFlashMillis = 0; - -bool lastMotionState; uint16_t highestSound = 0; uint16_t runningAverageSound = 0; @@ -154,27 +194,6 @@ void loop() unsigned long currentMillis = millis(); - if (currentMillis - previousFlashMillis >= 100 && flashTriggeredLed) - { - digitalWrite(led_pin, !flashStatus); - flashStatus = !flashStatus; - previousFlashMillis = currentMillis; - } - - if (currentMillis - previousFlashMillis >= 1000 && flashArmingLed && flashStatus == 0) - { - digitalWrite(led_pin, 0); - flashStatus = (flashStatus + 1) % 6; - previousFlashMillis = currentMillis; - } - - if (currentMillis - previousFlashMillis >= 100 && flashArmingLed && flashStatus > 0) - { - digitalWrite(led_pin, flashStatus % 2 == 0); - flashStatus = (flashStatus + 1) % 6; - previousFlashMillis = currentMillis; - } - if (currentMillis - previousTemperatureMillis >= TEMP_MEASURE_INTERVAL) { // save the last time you blinked the LED