Rotary dial

A telephone's rotary dial, with its pulse and off-normal contacts brought out to three wires. Aliases: phone dial, rotary dialer, pulse dial.

Pins

Pin What it does
GND The common of both sets of contacts.
DIAL The off-normal contacts: joined to GND while the wheel is off its rest.
PULSE The pulse contacts: joined to GND at rest, let go once for each pulse.

While it runs

Click a hole to dial that digit. The digit shows in the middle until the wheel is home again.

Reading it on an Arduino

With INPUT_PULLUP on both pins, count how many times PULSE goes high while DIAL is low:

pinMode(2, INPUT_PULLUP);   // DIAL
pinMode(3, INPUT_PULLUP);   // PULSE
// while digitalRead(2) == LOW, count the rising edges on pin 3;
// when pin 2 goes HIGH again, the count is the digit (10 means 0)

What the model gets right

The pulses: one for 1, nine for 9, ten for 0, at the governor's ten a second, each a 60 ms break and a 40 ms make, the ratio telephone exchanges were built for.

The off-normal contacts close as soon as the wheel leaves its rest and open a little after the last pulse, so "dialing" is never confused with a gap between pulses.

What it does not model

Contact bounce, and the speed a worn governor really runs at. The run from the finger stop back to the first pulse and from the last pulse to rest are a round 100 ms each.

Common mistakes

Counting falling edges and rising edges both: each pulse is one of each.

Reading the digit before DIAL goes high: the wheel may still be sending.

See it in action

Phone dial builds up the number dialed. Open it at /templates.