Sending periodic heartbeats, wondering if there are any timer bugs
Just wondering why you don't set hasStarted = false either in the stop() or in the reset() method.

By doing it in the stop() you could omit the second if in the reset() method.

Seeing a reset() method at least screams for resetting all values to default.