LCD отображает больше цифр, чем последовательный монитор

Я создаю систему мониторинга BPM. Последовательный монитор отображает точные значения BPM в диапазоне от 60 до 100+. Но мой ЖК-дисплей не точен. Например, на последовательном мониторе мой bpm составляет около 67, но на ЖК-дисплее он отображает 676. Что мне нужно сделать, чтобы это исправить?

PulseSensorPlayground pulseSensor; // Создает экземпляр объекта PulseSensorPlayground под названием "pulseSensor".

void setup() { 
    Serial.begin(9600); // Для Последовательного Монитора
    lcd.begin();
    lcd.backlight();
 
    // Настройте объект PulseSensor, назначив ему наши переменные.
    pulseSensor.analogInput(PulseWire);
    pulseSensor.blinkOnPulse(LED13); //aавтоматически магически мигает светодиод Arduino с сердцебиением.
    pulseSensor.setThreshold(Threshold);
 
    // Дважды проверьте, что объект "Датчик пульса" был создан и "начал" видеть сигнал. seeing a signal.
    if (pulseSensor.begin()) {
        Serial.println("We created a pulseSensor Object !"); //TЭто печатается один раз при включении питания Arduino или при сбросе Arduino.
    }
}
 
void loop() { 
    int myBPM = pulseSensor.getBeatsPerMinute(); //Вызывает функцию для нашего объекта pulseSensor, которая возвращает BPM как "int".
    // "myBPM" теперь удерживает это значение BPM.
    if (pulseSensor.sawStartOfBeat()) { // Если тест "истинный", выведите сообщение "произошло сердцебиение".
        Serial.println("♥ A HeartBeat Happened ! "); // If test is "true", print a message "a heartbeat happened".
        Serial.print("BPM: "); // PНапечатать фразу "BPM: "
        Serial.println(myBPM); // Выведите значение внутри myBPM.

        lcd.setCursor(0,0);
        lcd.print("BPM: "); // Напечатать фразу "BPM: "
        lcd.print(myBPM);
    }
    delay(50); // рассмотрена наилучшая практика в простом скетче.
}

, 👍1

Обсуждение

Я исправил форматирование и отступы для вас. Вы всегда должны правильно указывать отступы (в среде IDE Arduino даже есть функция автоформатирования для этого), потому что это помогает вам выявлять структурные ошибки., @chrisl

Что произойдет, если вы добавите lcd.print(" "); после другого кода ЖК-дисплея, чтобы заполнить пробелами пространство за BPM? Я подозреваю, что дополнительные 6 являются результатом предыдущего вызова дисплея и просто сохраняются, потому что вы не перезаписываете их. Добавление пробелов гарантирует, что пространство после BPM всегда будет пустым., @chrisl

Я думаю о том же самом. И если я правильно это понимаю, вы имеете в виду добавление lcd.print(" "); после lcd.print("BPM: ");? Я уже сделал это, сэр, но прежний дисплей все еще продолжает отображаться., @AccelLim

@AccelLim: Вам нужно вставить lcd.print(" "); после lcd.print(myBPM);. Вы хотите, чтобы последняя цифра номера была удалена., @PMF

Если вы используете стандартную ЖК-библиотеку от Arduino, вы можете очистить экран с помощью "lcd.clear ()" вместо того, чтобы просто установить курсор на (0,0) с помощью " lcd.setCursor(0,0)". Ссылка: https://www.arduino.cc/en/Reference/LiquidCrystalClear, @Peter Paul Kiefer

Как сказал PMF: Вставьте его после " lcd.print(myBPM);`. Тогда, пожалуйста, доложите, @chrisl

сейчас все работает нормально. Большое вам спасибо :), @AccelLim


1 ответ


4

Дополнительное "6", по-видимому, происходит от одного из первых значений. Возможно, первое напечатанное значение-это просто неверное значение, и все следующие значения верны.

Дело в том, что это неверное значение может занимать на дисплее на один символ больше, чем другие (правильные) значения. И когда вы просто перемещаете курсор и печатаете снова, ранее отображенный текст изменяется только в том случае, если он перезаписан новым текстом. Правильные значения короче, поэтому последняя цифра неверного значения не перезаписывается. Этого, конечно, не происходит с Serial, так как Serial не печатает в одном и том же пространстве снова и снова (как это делает ЖК-дисплей с ограниченным пространством).

Что теперь делать: Вы можете использовать lcd.clear (), чтобы удалить весь текст с дисплея перед печатью новых значений. Хотя это может привести к заметному мерцанию на дисплее. Часто лучше просто переписать весь возможный оставшийся текст пробелами с помощью lcd.print(" ");. Вставьте это после lcd.print(myBPM) (так как после этого вы хотите удалить все оставшиеся цифры). В этом случае у вас осталась только 1 цифра, поэтому достаточно одного пробела. Чтобы быть уверенным, что это не повторится, когда по какой-либо причине вы получите более одной оставшейся цифры, вы можете использовать несколько пробелов (lcd.print(" ");).

,