Проблема с кнопкой

Я делаю проект, в котором при нажатии кнопки на ЖК-экране отображается сообщение. Но с множеством проб и ошибок это не дает правильного результата.

Вот схема:

Вот код:

#include <LiquidCrystal.h>

// инициализируем библиотеку, связывая любой необходимый вывод интерфейса ЖК-дисплея
// с номером вывода Arduino, к которому он подключен
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
#define BUTTON 7
void setup() {
  // устанавливаем количество столбцов и строк ЖК-дисплея:
  lcd.begin(16, 2);
  pinMode(BUTTON, INPUT);
}

void loop() {
  // устанавливаем курсор в столбец 0, строку 1
  // (примечание: строка 1 — это вторая строка, так как отсчет начинается с 0):
  lcd.setCursor(0, 0);
  // вывести количество секунд с момента сброса:
  lcd.print("Press Button");
  lcd.setCursor(0,1);
  lcd.print("to make COFFEE");
  if (digitalRead(BUTTON) == HIGH) {
    lcd.clear();
    lcd.print("SENT TO MACHINE");
  }
}

, 👍-2


2 ответа


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

1

Похоже, у вас несколько проблем.

  1. Положительное и отрицательное снабжение "rails" на вашей макетной плате не соединены внутри друг с другом. Вы должны добавить плюсовую перемычку.

  2. Вы пытаетесь определить, когда кнопка обеспечивает логический уровень HIGH, но это невозможно сделать с текущим "подключением".

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

Это место, которое было бы неплохо увидеть под другим углом.

,

Я не анализировал (во всяком случае) их схему, как вы, но сообщение на ЖК-дисплее указывает на то, что lcd.print("SENT TO MACHINE"); был выполнен в какой-то момент (из-за завершающего **INE** в первой строке), что, кажется, ставит под сомнение *"нет возможности сделать это"*. Таким образом, вы можете захотеть подтвердить это в ответе, хотя бы для того, чтобы отклонить его, предполагая, что он не информирует вас о том, что в их цепи происходит что-то другое., @timemage

@timemage - Вы неправильно меня процитировали. Это «Вы пытаетесь определить, когда кнопка обеспечивает ВЫСОКИЙ логический уровень, но нет возможности сделать это с текущей «проводкой»», что является точным утверждением. Я **также** подозреваю, как и вы, что объявление OP pinMode(BUTTON, INPUT); превратило вход в радиоантенну, и это просто вызывает сообщение «SENT TO MACHINE». СОВЕТ: Лучшая часть SE — это тот факт, что несколько человек могут ответить на один и тот же вопрос., @VE7JRO

Цитата кажется верной. Ваш ответ показывает, что вы неправильно поняли то, что я говорю. То, что вы делаете прямо здесь, в этом комментарии, - это то, что я имел в виду, признавая, что происходит на ЖК-дисплее, хотя бы для того, чтобы отклонить это. Только, не делая этого в ответ. То, что вы говорите о его поведении без подтягивания, соответствует тому, что я думал об этом. Итак, нет необходимости, чтобы мой собственный ответ. Однако ваш ответ можно улучшить, сказав обе эти вещи в самом ответе., @timemage

@timemage - LOL, каждый ответ в каждом стеке SE можно улучшить. Вместо того, чтобы жаловаться на мой ответ, попробуйте опубликовать лучший. Я предлагаю один из тех ответов «книжный отчет». Используйте все инструменты в «панели инструментов для составления ответа», такие как полужирный текст, курсив, H1, H2 и т. д. Убедитесь, что это максимальное количество символов, которое вы можете ввести (30 КБ или сейчас 60 КБ?), потому что это именно что ищет новый пользователь, верно?, @VE7JRO

Это честная попытка быть полезным. Не знаю, что тебя в этом убедит., @timemage

Смысл наличия комментариев под ответами заключается в том, что ответы, которые могут быть неплохими, могут быть дополнительно изменены, чтобы сделать их лучше. Или указать на неточность., @Nick Gammon

Я ценю вашу помощь! Все работает (и извините за плохой ракурс :/ ), @James


0

вы должны реализовать подавление дребезга, потому что, когда вы нажимаете кнопку рукой, она будет отскакивать и делать сигнал нестабильным, поэтому нет High/Low, вот документ от Arduino:

https://www.arduino.cc/en/Tutorial/BuiltInExamples/Debounce

,