A lot of phrases surrounding phones don’t make sense anymore. With a modern cellphone, you don’t really “hang up” and there’s certainly no “dial” to be had. However, with [jakeofalltrades’] project, you can read an old-fashioned phone dial using an Arduino.
The idea behind a phone dial is actually pretty simple. When you pull the dial back to the stop using one of the numbered holes and release it, it causes a switch to open and close the same number of times as the hole you selected. That is, if you pull back the 5 hole, you should get 5 switch closures. The duration of each switch event and the time between switch events is a function of the speed the dial moves because of its internal spring. The zero hole actually produces ten pulses.
There are standards for how precise the timing has to be, but — honestly — it’s pretty loose since these were not made to be read by precise microcontroller timers. In the United States, for example, the dial was supposed to produce between 9.5 and 10.5 pulses per second, but the equipment on the other end would tolerate anything from 8 to 11.
Even if you don’t want a rotary dial in your next project, the code has some good examples of using ATmega328 timers that you might find useful in another context. However, a dial would add a nice retro touch to any numeric input you might happen to need.
Source: DIAL A FOR ARDUINO