diff --git a/RotaxMonitor/src/tasks.cpp b/RotaxMonitor/src/tasks.cpp index 6c073cf..8905726 100644 --- a/RotaxMonitor/src/tasks.cpp +++ b/RotaxMonitor/src/tasks.cpp @@ -227,6 +227,15 @@ void rtIgnitionTask::rtIgnitionTask_realtime(void *pvParameters) if (cycle12 && cycle34) // wait for both 12 and 34 cycles to complete before sending data to main loop and resetting peak detectors { + // disable interrupts during adc samples + disableInterrupt(digitalPinToInterrupt(rt_int.trig_pin_12p)); + disableInterrupt(digitalPinToInterrupt(rt_int.trig_pin_12n)); + disableInterrupt(digitalPinToInterrupt(rt_int.trig_pin_34p)); + disableInterrupt(digitalPinToInterrupt(rt_int.trig_pin_34n)); + disableInterrupt(digitalPinToInterrupt(rt_int.spark_pin_12)); + disableInterrupt(digitalPinToInterrupt(rt_int.spark_pin_34)); + + // reset coils 12 and 34 cycles cycle12 = false; cycle34 = false; @@ -284,9 +293,18 @@ void rtIgnitionTask::rtIgnitionTask_realtime(void *pvParameters) if (xQueueSendToBack(rt_queue, (void *)&ign_box_sts, 0) != pdPASS) ign_box_sts.n_queue_errors = ++n_errors; } + + // enable interrupts ready for a new cycle + enableInterrupt(digitalPinToInterrupt(rt_int.trig_pin_12p)); + enableInterrupt(digitalPinToInterrupt(rt_int.trig_pin_12n)); + enableInterrupt(digitalPinToInterrupt(rt_int.trig_pin_34p)); + enableInterrupt(digitalPinToInterrupt(rt_int.trig_pin_34n)); + enableInterrupt(digitalPinToInterrupt(rt_int.spark_pin_12)); + enableInterrupt(digitalPinToInterrupt(rt_int.spark_pin_34)); } } // Delete the timeout timer + esp_timer_stop(timeout_timer); esp_timer_delete(timeout_timer); LOG_WARN("rtTask Ending [", params->name.c_str(), "]"); // Ignition A Interrupts DETACH