### Analog clock torture test

After playing around with things a bit, I find that I am able to run the clock forward at 8x speed (125ms/tick), but only able to do so reliably in reverse at 4x speed (250ms/tick).

So here is the "torture test" I have devised. It fastforwards the clock for 60 ticks, then reverse the direction for another 60 ticks. At the end of it, the second hand should return to the original position. By running this in a loop for many hours, I can confirm that there is no slippage for a given set of parameters.

The parameters for this particular clock (another \$2 clock I picked up from KMart after I accidentally stepped on and broke the Ikea one) are:
• Forward : 32ms pulse (9ms on, 1ms off)
• Reverse : 12ms pulse, 12ms wait, 28ms pulse

The high-level code to implement the above looks like this:

```void forward_tick() {
for (int i=0; i<32; i++) {
digitalWrite(tickpin, HIGH); delayMicroseconds(900);
digitalWrite(tickpin, LOW); delayMicroseconds(100);  }
tickpin = (tickpin == 25 ? 27 : 25);
}

void reverse_tick() {
digitalWrite(tickpin, HIGH); delay(12);
digitalWrite(tickpin, LOW); delay(12);
tickpin = (tickpin == 25 ? 27 : 25);
digitalWrite(tickpin, HIGH); delay(28);```
```  digitalWrite(tickpin, LOW);
}
```

It is actually OK for the reverse tick to run slower because if you are trying to catch up to a certain time by running in reverse, the clock is still ticking ahead. So say if it's 3am now and I am trying to reverse back to 2am, that's 60 minutes worth of path to backtrace. At 4x speed, it will take me 60/4 = 15 minutes to do so. But in that 15 minutes, the clock has also moved ahead 15 minutes, so that's actually more like 45 minutes worth of time to backtrace.

Whereas if it's 2am and I am trying to fastforward to 3pm, again that's 60 minutes worth of time to traverse. At 8x speed, it will take me 60/8 = 7.5 minutes. But in that time, the clock has also moved ahead 7.5 minutes, so it will take me more than 7.5 minutes to catch up with the clock.

I need to come out with a function to calculate given the current and target time, how much time it will take me to fastforward or reverse to the desired position. Then it will provide an objective measure for the optimal route to take when the clock needs to catch up with the actual time.

1. I never thought I would see someone as addicted to this stuff as me.

Countless hours poured into making a dashboard of meters using the hacked clocks.

After many futile attempts only now managed to get a clock going forward (the wires would come off with my limited soldering skills)

Thanks for posting your discoveries. Helps many a lot.

Going to try your PWM method.

2. Ha ha! Nice to see someone working on this as well. I have been working on this clock stuff on-and-off for a few years now, mainly to see if it's possible that make a WiFi analog clock that works reliably and reasonably well on batteries. My friends just think I am wasting my time.

I was elated when I discovered I could make the clock go in reverse. Didn't think it was possible! And quite reliably as well. Now I have to go back and rip up my ULP code to incorporate the reverse logic.

3. With your advanced electronic skills wouldn't it be possible to make the clock use the esp32 only for time sync purposes and let the clock run "normally" otherwise ?