Проверка перемычки между двумя контактами на Arduino

Я занимаюсь созданием сканера тегов (который передает идентификатор тега на компьютер), и я решил использовать для этого Arduino Micro и просто использовать функцию клавиатуры, чтобы сэкономить себе целое много хлопот. Однако, судя по тому, что я читал, постоянное открытие клавиатуры может затруднить ее программирование.

Я решил, что мое решение будет состоять в том, чтобы использовать два контакта в качестве проверки перемычки и добавить в настройку некоторый код для чтения входного контакта; если цепь между ними замкнута, функция клавиатуры никогда не активируется, а если она разомкнута, Arduino будет действовать как клавиатура. Таким образом, я смогу установить перемычку, если мне нужно ее запрограммировать, и оставить ее выключенной, если я просто хочу, чтобы она работала.

К сожалению, я никогда раньше не делал ничего подобного, и я действительно не хочу просто начинать что-то подключать и рисковать повредить свою плату. Я немного почитал, но решил, что хочу поделиться с кем-нибудь своими идеями, прежде чем попробовать.

Во-первых, вы бы порекомендовали другой подход? Я видел вопрос, в котором использовался внутренний подтягивающий резистор, чтобы проверить, соединена ли перемычка с землей, но, поскольку я хочу сделать эту проверку только один раз, это хороший путь?

Во-вторых, если я подключу его между двумя контактами, правильно ли я думаю, что мне понадобится резистор между ними (веб-сайт Arduino предлагает от 470 Ом до 1 кОм при подключении к другим устройствам, так что я предполагаю, что это было бы хорошо? количество)? Как бы я установил штифты, чтобы это сработало; должен ли я сделать один контакт выходным, а другой входным и просто прочитать входной контакт (после чего я бы просто отключил выходной контакт), или мне нужно добавить дополнительные соединения?

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

, 👍2

Обсуждение

почему на удержании как слишком широкий? есть два идеальных ответа, @Juraj

Я проголосовал за закрытие, потому что в одном вопросе было задано несколько вопросов. Я думаю, что Юрай прав, есть два отличных ответа, поэтому я голосую за повторное открытие. +1 за каждый из ответов., @VE7JRO


2 ответа


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

8

Во-первых, добро пожаловать сюда. Обычно вопросы должны содержать, ну, только один вопрос ;)

В любом случае обычная схема с кнопками (перемычка видна как кнопка) вот такая:

схема

В левом случае обычно вывод arduino «притягивается» резистором, когда кнопка не нажата (или отсутствует перемычка), поэтому на нем будет написано «LOW». Когда кнопка нажата, ардуино увидит «ВЫСОКОЕ» значение, так как кнопка «сильнее», чем резистор, и может форсировать его значение. Резистор называется "подтягивающим".

В правильном случае напряжения инвертированы. Вы читаете «ВЫСОКОЕ» значение, когда кнопка не нажата, и «НИЗКОЕ» значение, когда она нажата. Резистор называется «подтягивающим» по понятным причинам.

Резистор необходим, потому что вам нужен «слабый» компонент, который может подтягивать вывод Arduino до значения напряжения; он должен быть слабым, чтобы кнопка могла переопределить его.

Однако Arduino, как очень распространенная функция, называется «внутренняя слабая подтяжка» цифровых контактов. Это означает, что внутри уже есть возможность включить слабый резистор, подтягивающий напряжение до +5В. По этой причине вам нужно просто соединить перемычку с землей и прочитать ее.

схема

В настройках необходимо установить вывод как INPUT_PULLUP, а затем проверить прочитанное значение:

const byte jumperPin = 2;

void setup() {
  pinMode(jumperPin, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(jumperPin) == LOW)
  {
    // Перемычка вставлена
  }
  else
  {
    // Перемычка не установлена
  }
}

Вот для чего предназначен пример DigitalInputPullup...

Что касается вашего другого вопроса, на каждой плате есть разъем с именем ICSP (если его нет, у вас должен быть доступ к контактам ICSP откуда-то еще). Этот разъем используется для повторной прошивки загрузчика (или для прошивки программы внешним программатором). Вам понадобится программатор Atmel, чтобы восстановить исходный загрузчик и «разблокировать» его.

К счастью, для этой задачи можно использовать любую плату Arduino; вам просто нужно будет загрузить на другую плату скетч ArduinoISP (уже включенный в Arduino IDE) и вы можете использовать его для прошивки. В Интернете есть множество руководств, как это сделать. Так что, чтобы «разблокировать» его, вам понадобится еще одна плата Arduino

,

6

Во-первых, предпосылка:

Постоянно открытая клавиатура может затруднить программирование

совершенно неверно.

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

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

Во-вторых, идея:

используйте два контакта в качестве проверки перемычки и задайте в настройках некоторый код для чтения входного контакта; если цепь между ними замкнута, функция клавиатуры никогда не активируется, а если она разомкнута, Arduino будет действовать как клавиатура.

является слишком сложным и бессмысленным. Если все, что вы хотите сделать, это проверить состояние «установлено» или «не установлено» с помощью какого-либо внешнего «устройства», то вы имеете в виду кнопку или переключатель. Для этого не нужно двух булавок — только одна. В Интернете доступно множество руководств, в которых подробно показано, как читать состояние кнопки (или переключателя). (Совет: используйте контакт, установленный на INPUT_PULLUP, и подключите этот контакт к GND, чтобы «активировать» его. Если хотите, включите небольшой резистор [100 Ом] для безопасности).

Подводя итог:

  1. Если вы не слишком глупы в своей программе, то проблем не решить.
  2. Вы слишком много думаете о своем решении.
,