Tutorial: Arduino and Thumbwheel switches

This is chapter forty of a series originally titled “Getting Started/Moving Forward with Arduino!” by John Boxall – a series of articles on the Arduino universe. The first chapter is here, the complete series is detailed here. Any files from tutorials will be found here.

[Updated 20/01/13]

In this article we go back to the past via the use of push-wheel/thumbwheel switches with out Arduino systems. Here are some examples sourced from somewhere on eBay:

For the uninitiated, each switch is one vertical segment and they can be connected together to form various sizes. You can use the buttons to select from digits zero through to nine. There are alternatives available that have a wheel you can move with your thumb instead of the increase/decrease buttons. Before the days of fancy user interfaces these switches were quite popular methods for setting numerical data entry. However they are still available today, so let’s see how they work and how we can use them. The switch’s value is made available via binary-coded decimal. Consider the rear of the switch:

We have common on the left, then contacts for 1, 2, 4 and 8. If you apply a small voltage (say 5V) to common, the value of the switch can be measured by adding the values of the contacts that are in the HIGH state. For example, if you select 3 – contacts 1 and 2 will be at the voltage at common. The values between zero and nine can be represented as such:

By now you should realise that it would be easy to read the value of a switch – and you’re right, it is. We can connect 5V to the common,  the outputs to digital input pins of our Arduino boards, then use digitalRead() to determine the value of each output. In the sketch we use some basic mathematics to convert the BCD value to a decimal number. So let’s do that now.

From a hardware perspective, we need to take into account one more thing – the push-wheel switch behaves electrically like four normally-open push buttons. This means we need to use pull-down resistors in order to have a clear difference between high and low states. So the schematic for one switch would be (click image to enlarge):

Now it is a simple matter to connect the outputs labelled 1, 2, 4, and 8 to (for example) digital pins 8, 9, 10 and 11. Connect 5V to the switch ‘C’ point, and GND to … GND. Next, we need to have a sketch that can read the inputs and convert the BCD output to decimal. Consider the following sketch:

The function readSwitch()  is the key. It calculates the value of the switch by adding the numerical representation of each switch output and returns the total as its result. For this example we used a numerical display shield that is controlled by the NXP SAA1064. If you don’t have one, that’s ok – the results are also sent to the serial monitor. Now, let’s see it in action:

Ok it doesn’t look like much, but if you need numerical entry it saves a lot of physical space and offers a precise method of entry.

So there you have it. Would you actually use these in a project? For one digit – yes. For four? Probably not – perhaps it would be easier to use a 12-digit keypad. There’s an idea…  But for now I hope you enjoyed reading this as much as I did writing it for you.

Update! See the addendum for using four switches at once to read four-digit numbers here

Have fun and keep checking into tronixstuff.com. Why not follow things on twitterGoogle+, subscribe  for email updates or RSS using the links on the right-hand column, or join our Google Group – dedicated to the projects and related items on this website. Sign up – it’s free, helpful to each other –  and we can all learn something.

The following two tabs change content below.

John Boxall

Person. Author of http://arduinoworkshop.com Director of http://tronixlabs.com.au Rare updater of http://tronixstuff.com VK3FJBX

8 Responses to “Tutorial: Arduino and Thumbwheel switches”

1. John Smith says:

I use up to 19 of these in remote controls, for electronic scoreboards because they are so simple to use , I lay them out in the same pattern as the scoreboard and even 80 year old cricket scorers can use the remote 🙂

see half way down the page at a basketball remote at http://scorebauds.co.za/page4.htm#Basketball

• John Boxall says:

That’s awesome – thank you for sharing
john

• John Smith says:

Er – I just noticed you have no diodes on the 4 contacts of the switches, but you say all the 1,2,4,8 connections are tied together ?

Any 1 switch set to 9 would mechanically short out all 4 lines regardless of if the common is connected or not, so all switches would be set to 9.

I don’t use a 4066 if there are only 4 switches , I just take each common to a pin on the micro to scan in sequence, but I have diodes on all the 1,2,4,and 8 connections of the switches.

• John Boxall says:

The second part of the article was a bit of a mess, so we’ve deleted it.
However we’ve come up with a completely different way of doing it, will be published in the next few days.
cheers
john

2. Nick Johnson says:

These are neat bits of hardware! Is it really necessary to use the 74HC4066, though? Couldn’t you just connect the Arduino pins directly? The current draw ought to be minimal, since the input pins are high impedance.

• John Boxall says:

Originally I tried it without the 74HC4066 but it went cuckoo bananas. (Something to do with internal pull-up resistors in the ATmega328 I/O pins) So the next thing that came to mind was the 74HC4066.

• John Smith says:

Heres a sketch of how you can use 10 bcd or groups of 4 normal switches http://flic.kr/p/9PB8nm .
If you cascade the 4017s ( http://flic.kr/p/9S6oUy ) then you can send data from up to25 switches via VirualWire with just 6 pins ( plus the wireless and interrupt pins ) of the arduino in one scan .

John aka Boffin1 Cape Town

3. Colin T.A. Gray says:

Have you ever found a socket for these?

I was imagining a system where you could use these as a “keycard”. You’d walk around with the wheel switch, walk up to the locked system, insert the switch, enter some sequence of numbers, and then remove the switch.

Australian Electronics!

Buy and support Silicon Chip - Australia's only Electronics Magazine.