Уменьшение статического электричества при чтении кнопки

usb

У меня есть очень простой код контроллера, над которым я работаю для робота.

void setup() {
  // put your setup code here, to run once:
  pinMode(3,INPUT);
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(digitalRead(3));
}

Единственная проблема заключается в том, что я не могу получить постоянное показание на переключателях, потому что, когда я щелкаю переключателем, я получаю постоянный поток единиц, но когда я выключаю переключатель, я получаю спорадический поток единиц и нулей. Однако я заметил, что если я приложу палец к USB-порту, ведущему от моего Arduino Nano, я получаю постоянный поток 1 с, когда он включен, и нули, когда он выключен.

Кто-нибудь может порекомендовать, как обойти эту проблему или имитировать прикосновение к USB-порту?

, 👍0

Обсуждение

Правильно ли подключен GND? Похоже, это твоя проблема, @Tarick Welling

Это больше похоже на то, что у вас не подключен подтягивающий или понижающий резистор. При использовании pinMode(pin, INPUT_PULLUP) вы активируете внутренний подтягивающий резистор Arduino., @chrisl


1 ответ


2

Похоже, вам нужен подтягивающий резистор.

Если вход CMOS, такой как цифровой вход Arudino, ни к чему не подключен, он будет "плавать", прыгая между 1 и 0.

Подключите резистор 10 кОм между входным контактом и землей (перед переключателем). Таким образом, если переключатель выключен/разомкнут, резистор замыкает вход на землю.

Если переключатель включен/замкнут, он подает +5 В на контакт, перегружая резистор.

(Обратите внимание, что вместо этого вы можете использовать подтягивающий резистор, а затем подключить переключатель к земле вместо +5 вольт. Когда вы делаете это, вход меняется на противоположный {ВЫСОКИЙ, если переключатель не нажат, и НИЗКИЙ, если переключатель нажат.} На контактах цифрового входа имеется внутренний подтягивающий резистор, который можно подключить с помощью параметра INPUT_PULLUP вместо INPUT при настройке контакта с функцию pinMode(). Таким образом, вам не понадобится дополнительный резистор.)

Также обратите внимание, что помимо подтягивающего или подтягивающего резистора вам может понадобиться устранить дребезг коммутатора. Вы можете сделать это, написав свой код, который обнаруживает нажатия переключателей, чтобы игнорировать изменения в течение 100 мс или около того. Это позволяет избежать быстрого дрожания при включении/выключении/включении/выключении, которое часто возникает у переключателей при переходе их контактов из открытого состояния в замкнутое (или из замкнутого в открытое).

,