loop() либо перестает работать, либо перестает работать lcd | кнопки не работают

lcd

Я использую комплект Let's Start Coding Ultimate Kit 1 (это был подарок на Рождество, не спрашивайте), и я пытаюсь использовать его для набора текста. Однако я не реализовал настоящие буквы.

#include <MakerScreenXVI.h>;

MakerScreenXVI lcd;

int currentNumber = 1;
int ms = 0;
int totalMS = 0;
bool first = false;

void setup() {
  // поместите сюда код установки для однократного запуска:
  pinMode(A0, INPUT);
  pinMode(A3, INPUT);

  lcd.begin();
  lcd.print("Success");
  lcd.setCursor(0,1);
  lcd.print(currentNumber);

}

void loop() {
  delay(200);
  changeNumber();
  delay(200);
}

void clearLCDLine(int line) {               
        lcd.setCursor(0,line);
        for(int n = 0; n < 16; n++) // 20 указывает символы в строке. Для ЖК 2х16 напишите - 16
        {
                lcd.print(" ");
        }
}

void changeNumber() {
  if (digitalRead(A0) == LOW) {
    if (first == false) {
      clearLCDLine(1);
      first = true;
    } else {
      first = false;
    }
    currentNumber++;
    if (currentNumber == 27) {currentNumber = 1;}

    lcd.print(currentNumber);
  } else if (digitalRead(A3) == LOW) {
    currentNumber = currentNumber - 1;
    if (currentNumber == 0) {currentNumber = 26;}
    //очиститьLCDLine(1);
    lcd.print(currentNumber);
  }
} 

По какой-то причине после удаления 1 он останавливается. На экран ничего не печатается, и с него ничего не стирается. Как я могу это исправить? Кроме того, кнопки всегда возвращают значение LOW. Как это исправить?

, 👍0

Обсуждение

LSCU-Kit не знаю, но есть ли на входах подтягивающие резисторы? Если нет, можете ли вы установить штифты с внутренними подтягиваниями и попробовать это?, @the busybee


1 ответ


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

0

Кнопки будут посылать НИЗКИЙ сигнал при нажатии, если они установлены с помощью pinMode INPUT_PULLUP.

Проблема с тем, что currentNumber не отображается, заключается в том, что после того, как вы очистите экран с помощью цикла for, вам нужно сбросить курсор в положение 0,1 с помощью lcd.setCursor(0,1); . В противном случае числа печатаются вне поля зрения.

Если я добавлю lcd.setCursor(0,1); чуть выше каждой строки с lcd.print(currentNumber); , я думаю, что код ведет себя так, как вы ищете.

Правка от человека, задавшего вопрос:
Вы также должны добавить задержку около 150-200, иначе одно нажатие будет считаться как много.

,

Я почему-то что-то сделал (думаю с кнопкой и гнёздами на плате) и обе кнопки уходят в минусы. Я следовал вашим инструкциям. До этого вам нужно было сначала нажать кнопку «вниз» (A3), чтобы другая кнопка работала, а затем она показывала однозначные числа и ноль. Как я могу это исправить?, @BoeingLikesToDab

Если я правильно понимаю, вы внесли некоторые изменения в код, поэтому трудно дать прямой совет, не видя этого. Код, который вы разместили выше, обеспечивает «границы» для переменной currentNumber с операторами «if». Я рекомендую отправить нам электронное письмо по адресу [email protected] с кодом, и мы сможем помочь., @letsstartcoding