아두이노를 사용하다 보면 Digital I/O핀이 모자라게 되는 경우가 있다. 이럴 때 1개의 analog input 핀으로 여러개의 스위치 입력을 받을 수 있다.
이 방식을 이해하려면 가장 먼저 이해해야 하는 것이 voltage divider 회로이다.
Vin(여기서는 +5V)과 GND 사이에 두개의 저항이 있으면 두 저항 사이의 전압은 두 저항값의 비율로 결정되게 된다.
R1=1K, R2=1K인 경우
R1=1K, R2=4K인 경우
R1=4K, R2=1K인 경우
그러므로 이 성질을 이용해 여러개의 스위치를 연결하는데 각각의 스위치에 저항값이 다른 저항을 붙여주면 각 스위치를 누를 때 마다 출력되는 전압값이 달라지게 되므로 그 전압값을 읽어보면 어떤 스위치가 눌렸는지 판단이 가능해진다.
만일 S1이 눌리면 R1=82K, R2=100K가 되고, S5가 눌리면 R1=10K, R2=100K가 된다. 즉 각각의 스위치가 눌린 경우 출력전압과 그에 해당하는 ADC 값을 계산하면 다음과 같다. (아래 표는 Vin이 3.3V일 때의 계산결과임. 하지만 Vin이 5V이건 3.3V이건 ADC value는 변하지 않음)
그러므로 analogRead()로 읽은 값이 대략 910~950 범위 내의 값이면 S5가 눌렸다고 판단하고, 820~860 범위 내의 값이면 S4가 눌렸다고 판단하면 된다.
또한 각각의 저항값을 잘 결정해주면 동시에 2개의 버튼이 눌렸을 때도 어떤 버튼이 눌렸는지 판단할 수 있다.