Если путаются соседние кнопки
На входе ардуино в
схеме Берсенева стоит делитель из резистора 3200 Ом (3,2К)
и резисторов кнопок 100,100+100,100+100+100 и.т.д. Ом.
Значение потенциала для аналогового входа для первой кнопки - 5В *(100/3200)=0,16В.
Напряжение меряется 10-битным АЦП, 5В соответствует значению 1023 в памяти контроллера, 0В - 0, всего 1024 градации аналогового сигнала потенциала.
В коде у нас получается для первой кнопки значение (0,16/5)*1024=34.
Для второй кнопки - 5В *(200/3200)=0,33В
в коде (0,33/5)*1024=68.
Итак, разница по коду у схемы Берсенева между значениями соседних кнопок - 34 единицы, запас на вариацию сопротивления кнопки (см ниже) - 3 единицы.
Это вполне достаточно для устойчивой селекции разных кнопок. Если у вас номиналы резисторов иные - нужно проверить по данным формулам разницу по коду
между соседними кнопками и если она меньше - можно попробовать уменьшить сопротивление резистора со значением 3,2К, но не менее, чем до 2К, это даст
увеличение разницы в полтора раза.
Если неустойчиво читаются кнопки (через раз):
Скорее всего вариация аналогового сигнала у Вас превышает заложенную по умолчанию. По-хорошем надо с этим бороться стабилизацией 5В, качественными
соединениями, экранированием проводов.
Но есть и другой, "ленивый" путь.
В программе Берсенева есть такой параметр
unsigned int res_key_delta = 3;
Как я понял, это зона нечувствительности, в которой может "плавать" измеренное значение аналогового сигнала при сравнении с запомненным значением. Можно попробовать ее аккуратно увеличить. При этом важно не превысить половину минимальной разницы между соседними сигналами кнопок в коде (описано выше).
Значительное увеличение данного параметра может привести к путанице с соседними кнопками. В общем, аккуратно увеличивать, пока проблемы не исчезнуть, реально может помочь увеличение на 2-3 единицы.
Например так:
unsigned int res_key_delta = 5;