Moved flash code to seperate core

main
Filip B P 2 years ago
parent 1e32f492b4
commit af6ca8a05a

@ -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() void setup()
{ {
Serial.begin(115200); Serial.begin(115200);
@ -125,6 +159,15 @@ void setup()
setup_wifi(); setup_wifi();
client.setServer(mqtt_server, 1883); client.setServer(mqtt_server, 1883);
client.setCallback(callback); 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 #define SOUND_MEASURE_INTERVAL 1000 * 10
@ -134,9 +177,6 @@ void setup()
unsigned long previousTemperatureMillis = 0; unsigned long previousTemperatureMillis = 0;
unsigned long previousSoundMillis = 0; unsigned long previousSoundMillis = 0;
unsigned long previousHighestSoundMillis = 0; unsigned long previousHighestSoundMillis = 0;
unsigned long previousFlashMillis = 0;
bool lastMotionState;
uint16_t highestSound = 0; uint16_t highestSound = 0;
uint16_t runningAverageSound = 0; uint16_t runningAverageSound = 0;
@ -154,27 +194,6 @@ void loop()
unsigned long currentMillis = millis(); 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) if (currentMillis - previousTemperatureMillis >= TEMP_MEASURE_INTERVAL)
{ {
// save the last time you blinked the LED // save the last time you blinked the LED

Loading…
Cancel
Save