Usage

#include <uuid/common.h>

Call uuid::loop() regularly and then call uuid::get_uptime_ms() when the uptime is required.

Example

#include <Arduino.h>
#include <uuid/common.h>

class Uptime: public Printable {
public:
	Uptime(uint64_t timestamp_ms = uuid::get_uptime_ms())
			: timestamp_ms_(timestamp_ms) {

	}

	size_t printTo(Print &print) const override {
		unsigned long days;
		unsigned int hours, minutes, seconds, milliseconds;
		uint64_t timestamp_ms = timestamp_ms_;

		days = timestamp_ms / 86400000UL;
		timestamp_ms %= 86400000UL;

		hours = timestamp_ms / 3600000UL;
		timestamp_ms %= 3600000UL;

		minutes = timestamp_ms / 60000UL;
		timestamp_ms %= 60000UL;

		seconds = timestamp_ms / 1000UL;
		timestamp_ms %= 1000UL;

		milliseconds = timestamp_ms;

		size_t len = print.print(F("Uptime: "));
		len += print.print(days);
		len += print.print('+');

		char time[2 + 1 /* hours */
				  + 2 + 1 /* minutes */
				  + 2 + 1 /* seconds */
				  + 3 /* milliseconds */
				  + 1] = { 0 };
		int ret = snprintf_P(time, sizeof(time), PSTR("%02u:%02u:%02u.%03u"),
				hours, minutes, seconds, milliseconds);
		if (ret > 0) {
			len += print.print(time);
		}
		return len;
	}

private:
	uint64_t timestamp_ms_;
};

void setup() {
	Serial.begin(115200);
}

void loop() {
	uuid::loop();

	Serial.println(Uptime());

	delay(1000);
}

Output

Uptime: 0+00:00:00.000
Uptime: 0+00:00:01.000
Uptime: 0+00:00:02.000
Uptime: 0+00:00:03.000
Uptime: 0+00:00:04.000
Uptime: 0+00:00:05.000
Uptime: 0+00:00:06.000
Uptime: 0+00:00:07.000
Uptime: 0+00:00:08.000
Uptime: 0+00:00:09.000
Uptime: 0+00:00:10.000