#include <LiquidCrystal.h> // библиотеку нужно установить
// «Конструктор» подключения (перечисление используемых выводов)
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
int pos = 1; // позиция начала вывода строки
int timeGap = 100;
String str = "Hello, world!"; // строка для вывода
uint8_t length = str.length(); // определяем длину выводимой строки
bool subStrFinished = false; // закончен ли вывод строки наоборот
void printSubstring() {
int curPos = 0; // начальная позиция
while(curPos < length) {
lcd.clear(); // очищаем дисплей
String subString = str.substring(length - curPos - 1, length); // наращиваем с конца
lcd.setCursor(0, 0); // печатаем строку с конца,
lcd.print(subString); // но всегда от начала дисплея
curPos++; // число букв с конца строки, увеличиваем каждый виток
delay(timeGap); // чем больше задержка, тем меньше скорость строки
}
subStrFinished = true; // теперь можно выводить строку целиком и со сдвигом
}
void setup() {
lcd.begin(16, 2); // инициализация: 16 символов и две строки
}
void loop() {
if(!subStrFinished) printSubstring(); // завершаем "выезд" строки слева
lcd.clear(); // очищаем дисплей перед каждым выводом
lcd.setCursor(pos, 0);
lcd.print(str); // Печатаем строку с заданной позиции
pos++; // ограничиваем величину в диапазоне от 1 до 15
if(pos > 15) {
pos = 1; // сдвиг от начала дисплея слева
subStrFinished = false; // строка целиком "уехала"
}
delay(timeGap); // чем больше задержка, тем меньше скорость строки
}