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 МОм перед контактом. Это означает, что для перевода входного вывода из одного состояния в другое требуется очень небольшой ток

, 👍0

Обсуждение

это макетная плата с разделенными посередине шинами питания?, @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


1 ответ


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

5

Посмотрите на это макетное изображение: макет с линиями подключения шин питания

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

Если вы этого не сделаете, ваша кнопка и подтягивающий резистор не будут подключены ни к чему, кроме контакта цифрового входа. Таким образом, нет ничего, что устанавливало бы состояние этого вывода (HIGH или LOW). Это так же, как вы просто подключили провод к цифровому входу. И это называется плавающий контакт. Он не притягивается активно в одном направлении, поэтому любой возникающий шум может изменить состояние входного контакта.

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

,