ARDUINO вывод текста на LCD из консоли (уровень "начало")

Rad89

✩✩✩✩✩✩✩
10 Фев 2023
2
0
Друзья, доброго времени суток. Вот в начале недели познакомился с этой прекраснейшей темой "Arduino". Поизучал принцип строения программы, как подключать модули. Вроде бы осознаю за кодинг - как и откуда ноги да руки растут. Научился подключать простейшие датчики и вытаскивать в консоль их показания. В какой-то момент решил попробовать вывести значения датчика (да любого) на дисп LCD 1602 с чипом (уже паянный из коробки пришел). С подключением библиотеки LiquidCrystal и работой с ней проблем не возникло. Датчики исправно кажут свои значения на дисплее. Но когда решил попробовать вывести текст из консоли на дисплей - тут я застопорился. Объясните мне, пожалуйста, что сделано не так и почему в конце напечатанного мной текста вот эти 2 символа?
C++:
#include "Wire.h"
#include "LiquidCrystal_I2C.h"

// дисп LCD 1602 с допаянной платой. 4 контакта цепляем на Arduino Uno
// +5V - VCC, GND - GND, A4 - SDA, A5 - SCL

LiquidCrystal_I2C LCD(0x27,16,2);

void setup()
{
  Serial.begin(9600);
  LCD.init();
  LCD.backlight();
  delay(1000);
  LCD.setCursor (0,0);
  LCD.print("text is:");
  LCD.setCursor (0,1);
}
void loop()
{
  if (Serial.available()>0)
  {
    char txt = Serial.read();
    Serial.write(txt);
    LCD.print(txt);
    delay(100);
  };
}
UPD: Я правильно понимаю, что эти символы - попытка программы напечатать или какие-то "остатки" или из-за петли Loop происходит сдвиг текста с его наложением?
 

Вложения

Изменено:

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
474
Я правильно понимаю, что эти символы - попытка программы напечатать или какие-то "остатки" или из-за петли Loop происходит сдвиг текста с его наложением?
Чтобы не было сдвига, перед LCD.print(txt); задавайте координаты печати: LCD.setCursor(0,1);LCD.print(txt);. Соответственно из setup() строку #17 уберите. "Остатки" можно затереть печатью пробела на их место.
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Serial.read читает все символы передаваемые из монитора порта, в том числе и непечатные. А к ним относятся и "возврат каретки" и "новая строка". В мониторе порта они обозначены как CR и NL , и по умолчанию дописываются к любой вводимой информации.
1676102702017.png
Можно просто отключить их, но это пол дела. Если отсылать другие символы, не имеющие отображения, например знак табуляции, то будет тоже самое. Более правильным решением было бы проверить txt и если ёё код менее 32 (в это пробел), то не выводить на экран. Для более точного понимания что выводиться , а что нет надо смотреть даташит на дисплей, в разделе таблица символов или как то так.
 
  • Лойс +1
Реакции: PiratFox

Rad89

✩✩✩✩✩✩✩
10 Фев 2023
2
0
а, понял что к чему. Благодарю! Буду дальше мучить) В эту ветку еще вопросы буду выкидывать по дисплею. По любому появятся)