#pragma once #include class ParallelTask { private: unsigned long previousMillis; unsigned long interval; void (*callback)(); // Pointer to the function you want to run public: // Constructor: Takes the interval in milliseconds and the function to run ParallelTask(unsigned long interval_ms, void (*func)()) { interval = interval_ms; callback = func; previousMillis = 0; } // Call this in your main loop() void update() { unsigned long currentMillis = millis(); // Handle millis() rollover (happens ~every 50 days) and check interval if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (callback) { callback(); } } } // Optional: Update the interval dynamically while running void setInterval(unsigned long new_interval) { interval = new_interval; } };