diff --git a/src/uClock.cpp b/src/uClock.cpp index 9f27935..ee8f114 100755 --- a/src/uClock.cpp +++ b/src/uClock.cpp @@ -183,13 +183,30 @@ void uClockClass::stop() } } +void uClockClass::continue_playing() { + if (state == PAUSED) { + start_timer = millis(); + if (mode == INTERNAL_CLOCK) { + state = STARTED; + } else { + state = STARTING; + } + if (onClockContinueCallback) { + onClockContinueCallback(); + } + } +} + void uClockClass::pause() { if (mode == INTERNAL_CLOCK) { if (state == PAUSED) { - start(); + continue_playing(); } else { - stop(); + state = PAUSED; + if (onClockPauseCallback) { + onClockPauseCallback(); + } } } } diff --git a/src/uClock.h b/src/uClock.h index df1a08d..5323035 100755 --- a/src/uClock.h +++ b/src/uClock.h @@ -116,6 +116,14 @@ class uClockClass { onClockStopCallback = callback; } + void setOnClockContinue(void (*callback)()) { + onClockStartCallback = callback; + } + + void setOnClockPause(void (*callback)()) { + onClockPauseCallback = callback; + } + void init(); void setPPQN(PPQNResolution resolution); @@ -127,6 +135,7 @@ class uClockClass { void start(); void stop(); void pause(); + void continue_playing(); void setTempo(float bpm); float getTempo(); @@ -171,6 +180,8 @@ class uClockClass { void (*onSync24Callback)(uint32_t tick); void (*onClockStartCallback)(); void (*onClockStopCallback)(); + void (*onClockContinueCallback)(); + void (*onClockPauseCallback)(); // internal clock control // uint16_t ppqn;