// Определяем подключенные пины
#define LCD_LEN 16
#define LCD_WID 2
#define SLIDER 0
// Подключаем библиотеку
#include <LiquidCrystal_I2C.h>
//Создаем класс LCD
LiquidCrystal_I2C lcd(0x27, LCD_LEN, LCD_WID);
// Создаем переменные имени и возраста
char name[8] = {'Y', 'a', 'r', 'o', 's', 'l', 'a', 'v'};
char age[] = "21";
//Функция предностроек
void setup() {
Serial.begin(9600);
//Инициализируем LCD и включаем подсветку
lcd.init();
lcd.backlight();
}
//Функция цикла
void loop() {
// Считываем со слайдера значение и переводим его процентное соотношение
int val = map(analogRead(SLIDER), 0, 1023, 0, 100);
// Условия с окном в 20 процентов для вызова функции my_mes
if (0 <= val && val < 20) {my_mes("HELLO");}
else if (20 <= val && val < 40) {my_mes(name, 1);}
else if (40 <= val && val < 60) {my_mes(age, 0, (unsigned short)4);}
else if (60 <= val && val < 80) {my_mes("ABC", 0, 'm');}
else if (80 <= val && val <= 100) {my_mes("ABCDEFGH", 0, 0, 4);}
delay(1000);
}
// Функция принимающая массив и выводящая надпись
void my_mes(char* arr) {
// Метод стерающий все что было на дисплее
lcd.clear();
// Метод ставящий откуда пойдут символы
lcd.setCursor(0, 0);
// Метод выводящий на LCD надпись
lcd.print(arr);
}
// Функция принимает массив и число, позволяет вывести надпись с выбором строки
void my_mes(char* arr, unsigned short row) {
lcd.clear();
lcd.setCursor(0, row);
lcd.print(arr);
}
// Функция принимает массив и 2 числа, позволяет вывести надпись с выбором строки и столбца
void my_mes(char* arr, unsigned short row, unsigned short column) {
lcd.clear();
lcd.setCursor(column, row);
lcd.print(arr);
}
// Функция принимает массив, число и символ, позволяет вывести надпись с выбором строки и позиции экрана
void my_mes(char* arr, unsigned short row, char pos) {
lcd.clear();
short column = 0;
// Получаем длинну надписи
int len = strlen(arr);
// Судя из символа выбираем позицию
switch (pos) {
//Сообщение с лево
case 'l':
my_mes(arr, row, (unsigned short)column);
break;
// Сообшение с право и вычисление по длинне места 1 символа
case 'r':
column = LCD_LEN - len;
my_mes(arr, row, (unsigned short)column);
break;
// Сообшение по середине и вычисление по длинне места 1 символа
case 'm':
column = (LCD_LEN - len) / 2;
my_mes(arr, row, (unsigned short)column);
break;
default:
break;
}
}
// Функция позволяющая вывести не полный массив, получает массивl, 2 числа позиции и 1 число длинны.
void my_mes(char* arr, unsigned short row, unsigned short column, unsigned short maxLength) {
lcd.clear();
lcd.setCursor(column, row);
// Создаем буфер для хранения
char buffer[maxLength + 1];
// Копируем и обрезаем
strncpy(buffer, arr, maxLength);
// Вставляем символ конца строки
buffer[maxLength] = '\0';
lcd.print(buffer);
}