Уменьшение статического электричества при чтении кнопки
У меня есть очень простой код контроллера, над которым я работаю для робота.
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-порту?
1 ответ
Похоже, вам нужен подтягивающий резистор.
Если вход CMOS, такой как цифровой вход Arudino, ни к чему не подключен, он будет "плавать", прыгая между 1 и 0.
Подключите резистор 10 кОм между входным контактом и землей (перед переключателем). Таким образом, если переключатель выключен/разомкнут, резистор замыкает вход на землю.
Если переключатель включен/замкнут, он подает +5 В на контакт, перегружая резистор.
(Обратите внимание, что вместо этого вы можете использовать подтягивающий резистор, а затем подключить переключатель к земле вместо +5 вольт. Когда вы делаете это, вход меняется на противоположный {ВЫСОКИЙ, если переключатель не нажат, и НИЗКИЙ, если переключатель нажат.} На контактах цифрового входа имеется внутренний подтягивающий резистор, который можно подключить с помощью параметра INPUT_PULLUP
вместо INPUT
при настройке контакта с функцию pinMode()
. Таким образом, вам не понадобится дополнительный резистор.)
Также обратите внимание, что помимо подтягивающего или подтягивающего резистора вам может понадобиться устранить дребезг коммутатора. Вы можете сделать это, написав свой код, который обнаруживает нажатия переключателей, чтобы игнорировать изменения в течение 100 мс или около того. Это позволяет избежать быстрого дрожания при включении/выключении/включении/выключении, которое часто возникает у переключателей при переходе их контактов из открытого состояния в замкнутое (или из замкнутого в открытое).
- Первая настройка - отказ в доступе к usb-порту - ubuntu 14.04
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Может ли Arduino взаимодействовать с USB-устройствами без USB-хост-экрана?
- Если USB дает 5 В, как Arduino может подавать 5 В на контакт 5 В? (И еще вопрос)
- Максимальная последовательная скорость CH340
- Можно ли использовать внешний источник питания и USB одновременно на Arduino?
- Эмуляция стандартного периферийного USB-устройства Mifare с помощью RFID-RC522
- Можно ли загрузить скетч Arduino через последовательный порт (RX) вместо USB?
Правильно ли подключен GND? Похоже, это твоя проблема, @Tarick Welling
Это больше похоже на то, что у вас не подключен подтягивающий или понижающий резистор. При использовании pinMode(pin, INPUT_PULLUP) вы активируете внутренний подтягивающий резистор Arduino., @chrisl