Казалось, бы что может быть проще, чем обработать кнопку в Ардуино. А если кнопок 10 штук? Возьмем 10 контактов Ардуино? Да еще 10 проводов тащить, через весь корпус устройства. 🙁 нет, это не наш метод.
Понадобилось мне “обрабатывать” галетный переключатель, на 10 положений.
Цель – по положению переключателя, определить используемый самодельным трансивером диапазон.
Ну что может быть проще. Добавляем “подтягивающий” резистор в 10 кОм на +5 вольт питания, на галетный переключатель припаиваем сопротивления по 1 кОм и схема готова. Похожий вариант я уже рассматривал для клавиатуры в 20 кнопок. Там был предложен и вариант скетча с массивом измеряемых аналоговым входом значений. Вполне работоспособный вариант, но я решил попробовать упростить и его.
Для этого, я составил в MS Excel вот такую табличку.
Можно сказать, что я описал математическую модель нашего переключателя диапазонов. Теперь попробуем вывести математическую формулу, для описания нашего устройства. Для этого вставляем точечную диаграмму и добавляем к ней линию тренда. Уравнение линии тренда берем полиноминальным и выводим на график.
Вот и готова наша формула, описывающая переключатель диапазонов. Ну это все теория, а для проверки практикой, я написал вот такой скетч.
Результаты, как видим, вполне ожидаемые, все таки это математика 🙂
Получается, что не нужны массивы и можно рассчитывать сразу номер позиции переключателя по значению на аналоговом входе. Коэффициенты я немного “подкрутил”, исходя из своего реального набора резисторов и особенностей округления. Вышло вот так:
bb = 0.00003*an*an + 0.0053*an + 1.3;
Вроде ничего сложного, нужно просто пригласить Excel на помощь.
Диапазонов на переключателе может быть и меньше чем 11, формула и в этом случае будет работать. Количество же позиций в сторону увеличения, теоретически можно увеличивать до 15, когда расчетная разность в измеряемых показаниях станет менее 20 единиц. Такой критерий я выбрал из-за погрешности значений самих резисторов, которая может далеко превышать 2%, что сделает невозможным корректное определение положения переключателя.
Так же напомню, что формулу я считал для 11 положений переключателя, для большего количества, наверняка формулу необходимо будет уточнить с помощью MS Excel.
Ну и не забываем, что при переключении возможен “дребезг” контактов, но от него можно защититься, просто анализируя считываемое с аналогового входа значение. В случае “дребезга”, оно будет близко к максимально возможному – 1023. И такие значения можно не обрабатывать в программе.