Две кнопки, один ЖК-дисплей

Я пытаюсь создать программу, которая при каждом нажатии кнопки на ЖК-экране будет отображать другое слово. Однако кажется, что две кнопки выдают один и тот же результат («Экран А»), между ними нет никакой разницы, и я не уверен, в чем причина.

Код очень прост:

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 ");
        }
      }

    }

Любая помощь приветствуется

, 👍0

Обсуждение

Вам не хватает определения вашего массива buttonPin[]., @Duncan C


1 ответ


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

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 мс или более).

  • р>

,