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); // рассмотрена наилучшая практика в простом скетче.
}
@AccelLim, 👍1
Обсуждение1 ответ
Дополнительное "6", по-видимому, происходит от одного из первых значений. Возможно, первое напечатанное значение-это просто неверное значение, и все следующие значения верны.
Дело в том, что это неверное значение может занимать на дисплее на один символ больше, чем другие (правильные) значения. И когда вы просто перемещаете курсор и печатаете снова, ранее отображенный текст изменяется только в том случае, если он перезаписан новым текстом. Правильные значения короче, поэтому последняя цифра неверного значения не перезаписывается. Этого, конечно, не происходит с Serial, так как Serial не печатает в одном и том же пространстве снова и снова (как это делает ЖК-дисплей с ограниченным пространством).
Что теперь делать: Вы можете использовать lcd.clear ()
, чтобы удалить весь текст с дисплея перед печатью новых значений. Хотя это может привести к заметному мерцанию на дисплее. Часто лучше просто переписать весь возможный оставшийся текст пробелами с помощью lcd.print(" ");
. Вставьте это после lcd.print(myBPM)
(так как после этого вы хотите удалить все оставшиеся цифры). В этом случае у вас осталась только 1 цифра, поэтому достаточно одного пробела. Чтобы быть уверенным, что это не повторится, когда по какой-либо причине вы получите более одной оставшейся цифры, вы можете использовать несколько пробелов (lcd.print(" ");
).
- Печать string and integer LCD
- Отправка значения с одного Arduino на другой
- ЖК-дисплей I2C отображает странные символы
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
- Запрограммируйте Arduino Uno как цифровые часы
- ЖК-дисплей странные символы
- 16*2 1602A LCD дисплей не отображает никаких символов или контрастности, несмотря на правильное подключение
- Считыватель таймкода SMPTE с ЖК-дисплеем, вопрос кодирования
Я исправил форматирование и отступы для вас. Вы всегда должны правильно указывать отступы (в среде 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