ЖК-дисплей отображает букву "А" вместо 0

Я пытаюсь сделать таймер, который имеет точность до 1 десятой секунды. Однако когда предполагается, что он печатает "0", он будет печатать "А". Например, при печати "10" он будет печатать "1А". Эта программа длится всего несколько секунд. Любое предложение будет высоко оценено, спасибо!

#include <Wire.h>  
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
unsigned long time2 = 0;
int x = 0;
int a = 0;
int b = 0;
void setup() {
  lcd.begin(16,2);
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("00:00:00:0      ");
  Serial.begin(9600);
}

void loop() {
  unsigned long time1;
  time1 = millis();
  if (time1 - time2 > 100){
    time2 = time1;
    lcd.setCursor (9,0);
    x=x+1;
    lcd.print(x," ");
  }
  if (x>=10){
    x=0;
    a=a+1;
    lcd.setCursor(7,0);
    lcd.print(a,":");
  }
  if (a>=10){
    a=0;
    b=b+1;
    lcd.setCursor(6,0);
    lcd.print(b+a);
  }
}

, 👍2

Обсуждение

Подсказка: Проверьте и исправьте инструкцию lcd.print(a,":");, @Mikael Patel

https://www.arduino.cc/reference/en/language/functions/communication/serial/print/, @Juraj


1 ответ


-1

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

Одна слабость, которую я вижу в вашем коде, заключается в том, что вы считаете свои значения x, a, b до десяти, и вы печатаете их или сбрасываете их до нуля, поэтому вы печатаете "x", даже если их десять. Если по какой-либо причине при дальнейшей обработке на дисплее появятся шестнадцатеричные значения, вы в конечном итоге отобразите "А". Измените свой код так, чтобы значения > 9 не печатались, тогда эта слабость будет устранена.

,