Arduino Mega, 6 кнопок для каждого аналогового входа (A0-A9) - закрытие одной приводит к чтению другим

В повседневной жизни я скорее программист высокого уровня, с небольшими познаниями в электронике, заранее извиняюсь, если мне не хватает какой-то номенклатуры или основ. Я общаюсь со своим Arduino Mega через Firmata, поэтому не буду особо заморачиваться с кодом, так как считаю, что моя проблема на 100% связана с аппаратным обеспечением (если окажется, что это не так, я обязательно поделюсь подробностями)

Я создаю «клавиатуру» с 60 кнопками в аркадном стиле (2 контакта), и я различаю их по различному сопротивлению, когда цепь замыкается с помощью A0-A9 (10 аналоговых контактов, по 6 кнопок на каждой), и мне нужны остальные контактов для других функций.

Я создал схему, похожую на эту схему:

Итак, моя проблема: при нажатии кнопки A0/кнопки 1 контакты A1 & A2 также считывает то же значение. Если я нажимаю A0/кнопку 2, я получаю другое значение и могу определить, какая кнопка в A0 была нажата, но опять же - A1 & А2 тоже это прочитали, хоть я и не нажимал на них.

Подозреваю, что, возможно, я выбрал другой подход или даже использовал стандартную "клавиатуру" чипсы, но я выбрал именно этот путь.

Как сделать так, чтобы когда я нажимаю A0/кнопку 1, A1/A2 не считывал значение? Нужен ли мне отдельный V5? Или мне просто нужно как-то по другому поставить провода?

Обновление: согласно комментарию chrisl

Я обновил схему, добавив резистор для каждой группы кнопок:

И это решило мою проблему.

, 👍0

Обсуждение

почему вы используете аналоговые входы?, @jsotola

Чтобы иметь возможность использовать один контакт для обнаружения нескольких нажатий кнопок, и я делаю это, считывая аналоговое значение. Каждая кнопка будет показывать разное значение при нажатии, потому что она имеет разное количество резисторов. В целом очень похоже на это: https://www.youtube.com/watch?v=Y23vMfynUJ0&ab_channel=MichaelKlements, @wopolow

ваш подход не позволяет одновременно нажимать несколько кнопок, @jsotola

да, я знаю об этой оговорке, но меня это не беспокоит, мне не нужна эта функция, @wopolow


1 ответ


Лучший ответ:

1

Разумеется, все три аналоговых входа показывают одно и то же значение. Вы буквально соединили их друг с другом. Каждый зеленый провод соединен с красным проводом, который ведет к резистору внизу. Таким образом, все три входа связаны вместе.

Вы можете исправить это, используя один нижний резистор для каждой группы из 2 кнопок, каждая из которых подключена между 5 В и системой аналоговых входов/кнопок.

А при использовании аналоговых входов для нескольких кнопок последний бинарный резистор является интересной концепцией, которая может дать вам больше кнопок на аналоговый вход (в зависимости от шума в вашей среде). Хотя типичным способом считывания такого количества кнопок будет использование дополнительного чипа/микроконтроллера для сканирования кнопок в матричном расположении. С вашей текущей схемой вам все еще нужно 30 аналоговых входов.

,

Я попробую добавить резистор между каждым аналоговым входом и 5 В, как было предложено - спасибо! Вот где пик моего незнания. Воля вернуться позже и обновить. Схема fritzting упрощена — у меня есть 6 кнопок, подключенных к каждому аналоговому входу, и я использую 10 из них — так что я могу ожидать 60 (10x6)? Или это не так? И спасибо, что поделились обычным способом решения подобных проблем., @wopolow

Я также обновил свой ответ последним файлом fritzting/source. Возможно, я упустил момент или у меня есть какая-то другая проблема, но даже с резистором между каждым из A0-A2 и 5V результат остается прежним. Тем не менее цените свое время., @wopolow

@wopolow Ваша схема выглядит правильно, за исключением двух крайних правых кнопок. Они не связаны, как другие. Вы уверены, что ваша реальная схема верна? И проверяли ли вы, работает ли измерение на аналоговом входе через Firmata должным образом? Вы можете использовать мультиметр для проверки напряжения на каждом аналоговом входе вручную, чтобы проверить, работает ли схема должным образом. Может быть, было бы неплохо сначала построить тестовую схему на макете, вместо того, чтобы напрямую переходить к настройке реального проекта., @chrisl

Спасибо, я сделал, я просто не смог выполнить на более позднем этапе. Наличие отдельных резисторов было ответом на мой вопрос. Спасибо, сэр., @wopolow