Две кнопки, один ЖК-дисплей
Я пытаюсь создать программу, которая при каждом нажатии кнопки на ЖК-экране будет отображать другое слово. Однако кажется, что две кнопки выдают один и тот же результат («Экран А»), между ними нет никакой разницы, и я не уверен, в чем причина.
Код очень прост:
const int buttonPin1 = 13; // номер контакта кнопки
const int buttonPin2 = 12; // номер контакта кнопки
int buttonState = 0;
long randNumber;
void setup() {
for(int x=0; x<2; x++)
{
pinMode(buttonPin[x], INPUT);
}
}
void loop() {
for(int x=0; x<2; x++)
{
buttonState = digitalRead(buttonPin[x]);
if (buttonState == HIGH && buttonPin[x] == 13) {
lcd.print(" Screen A ");
}
if (buttonState == HIGH && buttonPin[x] == 12) {
lcd.print(" Screen B ");
}
}
}
Любая помощь приветствуется
@AleJuliet, 👍0
Обсуждение1 ответ
Лучший ответ:
Я думаю, что-то со схемой... можете ли вы добавить это к своему вопросу?
Кроме того, убедитесь, что buttonPin имеет значения 13 и 12 в первом и втором индексе.
Кстати, следующий код функционально идентичен:
void loop()
{
if (digitalRead(buttonPin[0]) == HIGH)
{
lcd.print(" Screen A ");
}
if (digitalRead(buttonPin[1]) == HIGH)
{
lcd.print(" Screen B ");
}
}
Если вы хотите иметь цикл и гибкую сумму, используйте что-то вроде:
#define NR_OF_PINS 2
int buttonPins[NR_OF_PINS] = { 8, 9 };
String screens[NR_OF_PINS] = { "Screen A", "Screen B" };
void loop()
{
for (int pin = 0; pin < NR_OF_PINS; pin++)
{
if (digitalRead(buttonPins[pin]) == HIGH)
{
lcd.print(screens[pin]);
}
}
}
Обновить
Мой ответ связан с кодом до того, как вы его отредактировали.
Примечания:
После редактирования кода вы забыли объявить buttonPin:
int buttonPin[] = { buttonPin1, buttonPin2 };
Вы не используете
long randNumber
Вместо глобальной переменной
int buttonState
вы можете создать ее локально в функции цикла (хотя согласно моему коду выше она вам не нужна).buttonState = digitalRead(buttonPin[x]);
Кроме того, вы, скорее всего, захотите добавить устранение дребезга кнопок (см. пример Arduino), если только вы не добавите задержку после показа экрана на значительную величину (например, 100 мс или более).
р>
- Как преобразовать код Arduino во встроенный код C/C++
- Использование switch case с 5-позиционным переключателем и последовательным выходом
- Как заставить ЖК-экран прокручивать текст , позволяя вводить кнопки?
- Проблема с кнопкой
- Заставьте одну кнопку печатать разные предложения на ЖК-дисплее
- Как заставить кнопку Arduino забыть о своем прошлом назначении?
- Закодируйте и подключите ЖК-дисплей и кнопку
- Как создавать объекты со своими переменными?
Вам не хватает определения вашего массива
buttonPin[]
., @Duncan C