Вешаем несколько кнопок на один провод

Задача: сэкономить входы на Arduino, повесив три кнопки на один вход.
Решение заключается в подачи на вход ардуино тока разного напряжения. К каждой кнопки мы подаём +5 Вольт таким образом:
1) К первой кнопке подаём просто +5 Вольт
2) Ко второй кнопке подаём +5 Вольт через сопротивления в 10кОм
3) К третьей кнопке подаём +5 Вольт через два сопротивления в 10кОм последовательно.
Далее соединяем выходы с кнопок вместе, притягиваем их к земле и к аналоговому входу Arduino.
Схема подключения:

Программа для прошивки ардуино:
int sensePin = 0;
int LED_PIN = 10;
int l=0;
int ledLevel = 3;
int led111 = 0;
int led_L = 600;
int led_H = 400;
int ledm = 50;
boolean lastButton = LOW;
boolean lastButton2 = LOW;
boolean lastButton3 = LOW;
boolean ledOn = 0;
void setup()
{
pinMode(LED_PIN, OUTPUT);
analogReference(DEFAULT);
Serial.begin(9600);
}
void loop()
{
// Кнопка №1: Включаем/Выключаем светодиод
if (analogRead(sensePin) > 990 && lastButton == LOW){
delay(5);
if (analogRead(sensePin) > 990 && lastButton == LOW){
ledOn = !ledOn;
lastButton = HIGH;
}
}
if (analogRead(sensePin) ==0 && lastButton == HIGH){
lastButton = LOW;
}
// Кнопка №2: Регулируем яркость светодиода
if (analogRead(sensePin) > 500 && analogRead(sensePin) < 530 && lastButton2 == LOW){
delay(5);
if (analogRead(sensePin) > 500 && analogRead(sensePin) < 530 && lastButton2 == LOW){
lastButton2 = HIGH;
ledLevel = ledLevel + 40;
if (ledLevel > 100) ledLevel = 10;
}
}
if (analogRead(sensePin) ==0 && lastButton2 == HIGH){
lastButton2 = LOW;
}
// Кнопка №3: Регулируем частоту мигания светодиода
if (analogRead(sensePin) > 335 && analogRead(sensePin) < 345 && lastButton3 == LOW){
delay(5);
if (analogRead(sensePin) > 335 && analogRead(sensePin) < 345 && lastButton2 == LOW){
lastButton3 = HIGH;
led_H=led_H-100;
led_L=led_L-160;
if(led_H < 20){
led_H=400;
led_L=600;
}
}
}
if (analogRead(sensePin) ==0 && lastButton3 == HIGH){
lastButton3 = LOW;
}
// Блок управления светодиодом
if (led_L !=600){
l++;
if(l>led_H) led111 = ledLevel;
if(l>led_L) {
led111 = 0;
l=0;
}
}
else {
led111 = ledLevel;
}
if(ledOn == true){
analogWrite(LED_PIN, led111);
}
else{
analogWrite(LED_PIN, 0);
}
// Блок "serial monitor" - для отладки
if (analogRead(sensePin) >0 ){
delay(5);
if (analogRead(sensePin) >0 ){
Serial.println(analogRead(sensePin));
}
}
}
Включив Serial Monitor можно проследить, что поступает на вход arduino при нажатии каждой из кнопок:
1) Первая кнопка выдаёт значение больше 990 (включение/выключение светодиода )
2) Вторая кнопка – 500-530 (регулировка яркости)
3) Третья – 335- 345 (регулировка частоты мигания)
Результат:
Думаю общий смысл понятен, спасибо за внимание.