Я делаю какой-то проект, и я использую Arduino для создания прототипа, мне нужно использовать 10 кнопок (вместе с другими вещами), и мне не хватает контактов.
Одно из решений, которое я мог бы придумать, - это использовать аналоговые контакты и использовать каждый из них для двух кнопок, примерно так:
смоделировать эту схему - схема, созданная с использованием CircuitLab
Таким образом, я могу прочитать вывод A0 и узнать, какой из них нажимается, посмотрев, составляет ли напряжение 5 В или половину этого.
Это хорошая идея? Различные кнопки НИКОГДА не должны нажиматься одновременно, и это единственная проблема, о которой я могу подумать.
Есть ли лучшие способы?
Ответы:
Зачем тратить несколько аналоговых выводов на два переключателя каждый, когда вы можете использовать любое количество кнопок на одном аналоговом выводе?
Два способа сделать это. Один в серии, другой параллельно.
Вот как работает управление аудиосистемой на руле автомобиля. И как работают некоторые из старых встроенных контроллеров ipod.
В зависимости от используемых резисторов, если вам нужно одновременно нажимать несколько кнопок и насколько чувствителен ваш аналоговый вход, вы можете иметь все 10 кнопок на одном выводе.
источник
Это сработало бы, но лучше использовать матрицу . Это та же концепция, что и для мультиплексирования светодиодов с матрицей, но с переключателями.
Это матрица 2х2. Полезная матрица больше, потому что при таком размере вы не экономите никакие контакты при индивидуальном подключении переключателей.
С матрицей 3х3 вы можете получить 9 переключателей. Вам нужно 10, так что вы можете добавить еще одну строку или еще один столбец и поддерживать 12 переключателей, или просто поставить 10-й переключатель на свой собственный вывод.
Преимущество здесь состоит в том, что вы можете использовать цифровой ввод-вывод, который дешевле и обычно более многочислен, чем аналоговый ввод-вывод. Регистр сдвига является дешевым способом , чтобы добавить больше цифровой ввод - вывод, если вы бежите.
Если вы хотите еще меньше контактов, вы можете, для некоторого увеличения сложности, использовать чарлиплексирование . Вам придется добавить диоды в дополнение к вашим переключателям, и эти диоды, вероятно, стоят столько же, сколько сдвиговый регистр. Однако, если цена не является вашей главной заботой, то она может иметь некоторое преимущество. С помощью этого метода вы можете прочитать все ваши переключатели (до 12, на самом деле) с четырьмя контактами.
источник
Аналоговый вход является правильным подходом, вы должны иметь несколько кнопок. Я также хотел бы предложить использовать IO Expander, например, MCP23017 . Он имеет 16 контактов, которые могут быть входами и выходами и управляется с помощью I2C с помощью двух контактов. У Adafruit есть библиотека Arduino для этого.
источник
Да, это кажется хорошей идеей, но в любом случае я собираюсь предложить альтернативу, которая только что пришла мне в голову.
Если у вас есть доступ к логическим элементам, вы можете отобразить множество
n
кнопок наceil(log2(n + 1))
контакты с помощью логической логики. Например, если у вас есть 4 кнопки, но только 2 контакта, вы можете создать такую конфигурацию:То есть,
button0
нажатие должно иметьpin0
иpin1
низкий;button1
,pin0
Низкой иpin1
высокой;button2
,pin0
Высокаяpin1
низка; иbutton3
,pin0
иpin1
высоко.Отсюда вытекают следующие логические выражения
Таким образом, отображение 4 кнопок на 2 контакта может быть реализовано только с двумя вентилями ИЛИ. Тем не менее, вам понадобится дополнительный вывод и некоторая дополнительная логика для указания, нажимается ли какая-либо кнопка вообще.
Конечно, все равно будут проблемы, если одновременно нажимать несколько кнопок.
Кроме того, если вы все еще будете придерживаться подхода с использованием резисторов, рассмотрите возможность использования на резисторах больших значений, кроме 100 Ом, так как 5 В через резисторы порядка 100 сОм дадут ток порядка 10 с мА, что является своего рода излишне высокого. Я предполагаю, что более разумные значения были бы 10 кОм или 47 кОм.
источник
Следующая страница может быть полезна:
http://txapuzas.blogspot.co.uk/2010/07/papertecladoanalogico-varios-pulsadores.html
Он написан на испанском языке, но основные элементы представлены в диаграмме, я думаю, что это очень хорошая идея для вас.
На этом видео вы можете увидеть конечный результат, эскиз на странице также, инкапсулированную функцию, чтобы упростить реализацию ваших проектов.
Youtube видео: 10 клавиш клавиатуры на одном контакте
Вот схема с сайта выше:
источник