Arduino чередует высокий и низкий сигнал без нажатия кнопки
Я подключил ЖК-дисплей к Arduino Uno. Я контролирую контраст с помощью библиотеки, а не потенциометра. Я пытаюсь прочитать ввод с кнопки, она подключена к контакту 9 Arduino. Резистор на изображении заземлен, теперь Arduino не воспринимает сигнал от кнопки, он продолжает печатать это, хотя в отметке времени ниже я не касался кнопки. Резистор 1 кОм.
20:03:30.808 -> button not pressed
20:03:31.816 -> button pressed
20:03:32.798 -> button pressed
20:03:33.827 -> button not pressed
20:03:34.821 -> button pressed
20:03:35.849 -> button not pressed
20:03:36.847 -> button not pressed
20:03:37.842 -> button pressed
#include <LiquidCrystal.h>
const int buttonNumPad1 = 9;
int buttonNumPad1State = 0;
int Contrast = 127.5;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
Serial.begin(9600);
pinMode(buttonNumPad1State, INPUT);
analogWrite(6, Contrast);
lcd.begin(16, 2);
}
void loop()
{
buttonNumPad1State = digitalRead(buttonNumPad1);
if (buttonNumPad1State == HIGH){
Serial.println("button pressed");
lcd.setCursor(0, 1);
lcd.print("pressed");
} else {
Serial.println("button not pressed");
}
lcd.setCursor(0, 0);
lcd.print("Hello");
delay(1000);
lcd.clear();
}
Вид сверху на мою макетную плату
это как-то связано? https://docs.arduino.cc/learn/microcontrollers/digital-pins
Входные контакты предъявляют чрезвычайно низкие требования к схеме, которую они оцифровывают, что эквивалентно последовательному резистору 100 МОм перед контактом. Это означает, что для перевода входного вывода из одного состояния в другое требуется очень небольшой ток
@Rice, 👍0
Обсуждение1 ответ
Лучший ответ:
Посмотрите на это макетное изображение:
Я пометил соединения шин питания зелеными и красными линиями. Видите, они не соединены посередине, именно там, где я нарисовал синюю пунктирную линию. Часто силовые шины макетов не соединены внутри в этом месте. Если это относится к вашей макетной плате, вам нужно будет перекрыть этот разрыв с помощью перемычек.
Если вы этого не сделаете, ваша кнопка и подтягивающий резистор не будут подключены ни к чему, кроме контакта цифрового входа. Таким образом, нет ничего, что устанавливало бы состояние этого вывода (HIGH или LOW). Это так же, как вы просто подключили провод к цифровому входу. И это называется плавающий контакт. Он не притягивается активно в одном направлении, поэтому любой возникающий шум может изменить состояние входного контакта.
Убедитесь, что кнопка и подтягивающий резистор действительно электрически соединены с землей. Устраните любые пробелы в шинах питания, которые могут быть на вашей макетной плате.
- Хорошая кнопка debouncing/Библиотека StateChange
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Как прервать функцию цикла и перезапустить ее?
- Как перезапустить счетчик в программе с помощью кнопки в настройке LDR Tripwire
- Кнопочная матрица / схемы подключения
это макетная плата с разделенными посередине шинами питания?, @Juraj
@Juraj да, это хлебница с разделенными посередине шинами питания., @Rice
Затем вы соединили эти две части силовой шины? Описанное поведение предполагает, что у вас плавающий входной контакт. Может резистор на самом деле не заземлен, @chrisl
@chrisl, ты хочешь, чтобы я подключил обе шины питания? Я загрузил вид сверху на свою макетную плату (обратите внимание, что ЖК-дисплей просто находится на макетной плате и не подключен), @Rice
@chrisl, а также о каких частях рельсов ты говоришь, @Rice
Что Джурай имел в виду под «разделенными посередине», так это то, что на вашем виде сверху на макетную плату шины питания разделены не только между верхом и низом изображения, но также между левым и правым. Тогда вам понадобится соединение посередине, соединяющее левую часть ряда с правой частью. Или вы можете попробовать разместить кнопку и ее разъемы также на левой стороне платы., @chrisl
@chrisl ты имеешь в виду что-то в этом роде (добавила картинку в вопрос), @Rice
Я попробовал это, а затем и это https://imgur.com/a/JRLFEMt, но все равно Arduino отправляет случайные высокие низкие значения, @Rice
Что касается рельсового теста, они более или менее просят вас сделать [это] (https://imgur.com/a/KbbQxRR). Либо эти две точки будут проверены как непрерывность (или около 0 Ом), либо она будет разомкнута., @timemage