Willing to pay for a simple "single-held-button-time-counter"

PaulS:

  sprintf(Upmsg, "UP %01d:%02d:%02d", Up.hours, Up.minutes, Up.seconds);

You want a one character field, with leading 0s as needed. Just how many leading 0s might be needed to pad the field to one character?

I found this piece of code in a clock example and used it to fix my character formatting to show as h:mm:ss

PaulS:
You use button in loop() and in the (stupidly named) IntCallback() function, which is an interrupt service routine. Variables shared between ISRs and other function MUST be declared volatile.

Your ISR is triggered when the pin changes state, and yet you don't care, in the ISR, what state the pin is now in.

As stated above I pieced together some random snippets of code from examples, including one that used the IntCallback() function, but as I said in my first post I have no idea what I'm doing. So much so that, as I said before, I am even willing to pay a professional to do it for me correctly.

I'm kinda stumbling in the dark, reading for myself to try and grasp the concepts, while also pulling from other peoples examples on how to implement them. I'm trying lol, but also learning. And I think/hope I'm like 80% of the way there, but I'm also grateful for any guidance yourself or others can share along the way...

As for now I'm about to go look up what a volatile declaration is and how to use it properly lol.

PaulS:
What, EXACTLY, are you trying to measure?

Simply put; the total times for vibrations that periodically start and stop.