Та, що біжить рядок в LCD на HD44780.

Пошук "готового рішення" рухомого рядка на Сі результату не дав. Тому довелося робити самому.

Цей "шматок" коду дозволяє виводити рядок, що біжить (справа-наліво), в будь-якому місці і з використанням будь-якої кількості знакомест, в LCD індикаторах з контролером HD44780 або аналогічному.

Перше, на чому потрібно зупинитися, це те, що мова Сі не дозволяє працювати з рядками "безпосередньо". Тобто неможливо скопіювати символ з одного рядка в іншу за допомогою оператора присвоювання ( = ) ... для цього потрібно використовувати спеціальну функцію strncpy (). Взагалі кажучи, для роботи з рядками в Сі використовуються кілька функцій. У самоМучітелях використання цих функцій присвячена окрема глава. В Help "e на CV_AVR опис функцій для роботи зі Троки знаходиться в розділі "String Functions". Прототипи цих функцій знаходяться у файлі string.h.

"... вихідна рядок ..." - рядок символи з якої потрібно виводити в "біжить" рядку;

"... відображаються символи ..." - власне "рядок, що біжить".

Для організації біжучого рядка обраний такий алгоритм:

1. Відображені символи зсуваються справа наліво. Крайній лівий при цьому "втрачається".

2. Після зсуву, в крайній правий символ копіюється черговий символ з початкового рядка.

3. При досягненні кінця заданої стрічки, черговим стає перший символ початкового рядка.

Для зсуву символів - для зсувається осередку зчитується код символу з екранного ОЗУ (DDRAM) HD44780 і \u200b\u200bзаписується в левостоящую осередок ОЗУ.

Згідно DataSheet на HD44780 лівий символ верхнього рядка має адресу в DDRAM - 0x00, а лівий символ нижнього рядка - 0x40. При цьому потрібно пам'ятати, що для того щоб звернутися саме до екранного ОЗУ (а не до ОЗУ знакогенератора) необхідно щоб біт RS дорівнював 1 (RS є старшим бітом в байті адреси см.DataSheet).

У підсумку отримуємо, що для того щоб "звернутися" до другого зліва символу верхнього рядка необхідно "працювати" з адресою 0x01 | 0x80 \u003d 0x81.

Функції запису і читання "внутрішнього вмісту" HD44780 є в бібліотеці (прототипи в lcd.h) .... поетому..собственно програма:

/ * Для CV_AVR

В даному прикладі рядок, що біжить виводитися в розряди з 8 (0xC7) по 16 нижнього рядка 16-ти розрядного індикатора.

. ......

#include

unsigned char n_sim \u003d 1, m_end \u003d 43; // 43 - Діна рядки в прикладі
...........

beg_stroka () (
unsigned char i;

// зрушення рядка, що біжить

if (beg_str) (
for (i \u003d 0; i<9;i++)lcd_write_byte(0xC7+i,lcd_read_byte(0xC8+i));
beg_str \u003d 0;

// запис чергового символу в крайній праву позицію

lcd_gotoxy (15,1);
lcd_putchar (ish_str);
if (++ n_sim\u003e m_end) n_sim \u003d 1;
}
}

Словник:

n_sim - покажчик положення поточного символу в заданій стрічці;

m_end - загальна кількість символів в заданій стрічці;

beg_str - біт "разрещающій" зрушення. C його допомогою можна регулювати швидкість "бігу";

ish_str - вихідна рядок.

Швидше за все, в кожному з існуючих компіляторів Сі є бібліотечні функції для роботи з HD44780. Тому "переробити" програму під "свій" компілятор не складе труднощів.

Вихідну рядок я "готую" за допомогою відомої утиліти "HD44780.exe". При її використанні, в коментарях, вказується довжина рядка: "/ * Maximum length of a line: 43 byte * /"

QAPASS LCD 1602 російський шрифт не підтримує, але можна вивести кирилицю на Arduino за допомогою створення власних символів. Розглянемо, як зробити будь-які символи і букви на кирилиці на LCD дисплеї Ардуіно. Для цього нам буде потрібно використовувати в скетчі змінну byte і функцію lcd.createChar (). Відразу відзначимо, що обсяг пам'яті на Ардуіно для знаків обмежений всього вісьмома символами.

Як вивести свій символ на LCD 1602

Вивести свій символ або кириличну букву на дисплей допоможе таблиця знакогенератора (CGROM). Такий вид пам'яті в Ардуіно, як CGRAM, може зберігати власні символи, але розмір пам'яті обмежений і може вмістити лише 8 власних символів. Один з нестандартних символів, який стане в нагоді для створення домашньої метеостанції - знак градуса. Давайте намалюємо символ.


Для початку візьміть аркуш паперу і намалюйте на ньому таблицю, де буде 5 стовпців і 8 рядків. Далі заштрихуйте в таблиці клітини (дивись фото вище), які повинні висвітлюватися на дисплеї. Справа в тому, що кожен символ на дисплеї складається з пікселів (5 пікселів в ширину і 8 пікселів у висоту). Далі представимо наш символ в вигляді масиву даних, що складається з восьми елементів - восьми рядків.

Виводимо на LCD +1602 власний символ

Для заняття нам знадобляться наступні деталі:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • LCD монітор 1602;
  • дроти «тато-мама».

Підключення LCD дисплея по I2C проводиться чотирма проводами «папка-мамка» - 2 дроти даних і 2 дроти живлення. Якщо ви підключаєте дисплей Ардіуно УНО, використовуйте наступну схему - висновок SDA підключається до порту A4, висновок SCL - до порту A5 і два дроти живлення - GND і 5V. Якщо QAPASS 1602 підключається по шині I2C до Arduino Mega, то на платі є відповідні порти - SDA і SCL.

Скетч для створення символу на LCD I2C

#include #include // створюємо свій символ і присвоюємо йому ім'я "simvol" byte simvol \u003d (0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000); void setup () (lcd.init (); // ініціалізація LCD дисплея lcd.backlight (); lcd.createChar (1, simvol); lcd.setCursor (0,0); // ставимо курсор на 1 символ першого рядка lcd.print (char (1)); // друкуємо символ на першому рядку ) Void loop () ()

Пояснення до коду:

  1. за допомогою масиву byte simvol \u003d (); ми зашифрували знак градуса, який намалювали раніше на листочку паперу;
  2. функція lcd.createChar (num, data); створює для користувача символ для LCD, де в дужках вказано num - номер символу і data - дані про масиві.
  3. кожен рядок масиву починається з 0b - «нуль» і прописна «b».

Виводимо на LCD 1 602 російський шрифт

QAPASS дисплей підтримує 8 нових символів (пронумерованих від 0 до 7) розміром 5 на 8 пікселів. Букву на кирилиці, як і символ, можна задати масивом з восьми байт, що характеризують відповідний рядок. Можна додати до 8 символів, тому використовуйте при виведенні поєднання латинських і кириличних літер, як на прикладі. Завантажте скетч з написом «Я ❤ сайт»

Скетч з російськими буквами на LCD I2C

#include // бібліотека для управління пристроями по I2C #include // підключаємо бібліотеку для LCD 1602 LiquidCrystal_I2C lcd (0x27,20,2); // присвоюємо ім'я lcd для дисплея 20х2 // створюємо символ серця і чотирьох букв на кирилиці byte heart \u003d (0b00000, 0b01010, 0b11111, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000); byte I \u003d (0b01111, 0b10001, 0b10001, 0b01111, 0b00101, 0b01001, 0b10001, 0b00000); byte B \u003d (0b11111, 0b10000, 0b10000, 0b11110, 0b10001, 0b10001, 0b11110, 0b00000); byte N \u003d (0b10001, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b10001, 0b00000); byte F \u003d (0b01110, 0b10101, 0b10101, 0b10101, 0b01110, 0b00100, 0b00100, 0b00000); void setup () (lcd.init (); // ініціалізація LCD дисплея lcd.backlight (); // включення підсвічування дисплея // присвоюємо символам порядковий номер lcd.createChar (1, heart); lcd.createChar (2, I); lcd.createChar (3, B); lcd.createChar (4, N); lcd.createChar (5, F); lcd.setCursor (6,0); // встановлюємо курсор на 6 символ першого рядка lcd.print (char (2)); lcd.print ( ""); lcd.print (char (1)); lcd.setCursor (0,1); // встановлюємо курсор на початок другого рядка lcd.print ( "P"); lcd.print ( "O"); lcd.print (char (3)); lcd.print ( "O"); lcd.print ( "T"); lcd.print ( "E"); lcd.print ( "X"); lcd.print ( "H"); lcd.print (char (4)); lcd.print ( "K"); lcd.print ( "A"); lcd.print ( "1"); lcd.print ( "8"); lcd.print ( "."); lcd.print ( "P"); lcd.print (char (5)); ) Void loop () ()

Пояснення до коду:

  1. Масиви рядків у функції byte simvol \u003d (); можна прописувати в рядок;
  2. слово сайт використовує набір російських і латинських букв.
  3. Процедура void loop () в скетчі не використовується, але все одно присутній.

Щорічно на вивісках магазинів, вулицях і переходах встановлюються панелі, що відображають рекламні записи у вигляді тексту. Вогники на панелях запалюються по-різному: рядки пересуваються вгору, вниз, в праву і ліву сторону. Також актуальні світяться картинки.

Такі аксесуари перехожі не залишать без уваги. Багато починаючі електронщики цікавиться тим, як влаштована ця конструкція і що потрібно для створення. Виріб легко виготовляється в домашніх умовах. Стаття познайомить початківця любителя електронних пристроїв з принципами роботи рухомого рядка, де Ардуіно використовується в якості основного компонента.

Та, що біжить рядок на Ардуіно - електронне виріб, в основі якого лежить мікроконтролер Arduino. Робоча область приладу покрита світлодіодами. Основне призначення - транслювання зображення і текстових повідомлень. Дані можуть бути статичними і анімованими.

Світлові рядки створюються за допомогою модулів. Розмір за замовчуванням - 32х16 см. Область, призначена під робочу поверхню, безпосередньо залежить відношенню кількості модулів і їх розміру.

Крім того, в рядок вставлений контролер, роль якого - управління картинкою. Пристрій працює в автономному режимі. Щоб змінити текстове послання або зображення, що біжить рядок підключають до комп'ютера. Профіль з алюмінію тримає всю конструкцію.

За колірною гамою розрізняють 2 види рухомого рядка на Arduino:

  1. Монохромний або одноколірний.
  2. Різні відтінки - зазвичай 8 кольорів, тут також включений чорний фон.

Найбільше люди вважають за краще червоний відтінок, так як він найбільш насичений. Також не менш популярний білий колір. Якщо білі вогники яскраво палають на чорному тлі, текст виглядає більш акуратно.

Всі дані користувач поміщає в пам'ять мікроконтролера. Для оновлення картинки або рядки існує кілька методів:

  1. Базовий - через USB-кабель. Мікропроцесор Ардуіно підключається через USB-порт до комп'ютерного пристрою. З комп'ютера розробник переносить свій програмний код в пам'ять мікропроцесора.
  2. За мережі через Лан-кабель. Спосіб передбачений для тих користувачів, які постійно оновлюють електронну рядок. Техніка підключення аналогічна попередньому пункту.

За типом розрізняють біжать дошки, зроблені для інтер'єру і застосування на вулиці. Вуличні часто захищені спеціальним козирком, щоб на світлодіоди не потрапила дощова вода.

Необхідний набір інструментів і матеріалів

Нижче наведена таблиця з докладним описом інструментів, які знадобляться для конструювання біжать вогнів на Ардуіно.

інструмент Особливості
Нано - модель, яка за розмірами сама мініатюрна серед лінійки Ардуіно. За своїм характером ця платформа нагадує свого родича -. Початківці електронщики, в основному, будують компактні моделі своїх пристроїв, тому в цьому знадобиться компактна Нано. Гніздо під зовнішнє живлення заховано всередині. Робота проводиться через USB-порти. Інші характеристики схожі з моделлю Уно.

Технічні характеристики:

  • напруга, необхідне для живлення пристрою, - 5 Вольт;
  • маса - 7 грам;
  • розмір - 19х42 мм;
  • робоча частотність - 16 МГц;
  • флеш пам'ять - 16 Кб;
  • оперативна пам'ять - 2 Кб;
  • цифрові Піни - 14 штук, причому 6 можна використовувати, як ШІМ-виходи
  • необхідну харчування при вході - близько 12 Вольт.

Існує 2 способи для харчування платформи:

  1. Через мікро-USB або міні-USB.
  2. При використанні зовнішнього живильного елемента, в якому загальну напругу від 6 до 20 Вольт. Практично відсутні пульсації хвилі.
Стрічка з світлодіодів Стрічка з світлодіодів підключається паралельним способом, по кілька відрізків. Кожен відрізок повинен бути не більше 5 м в довжину. Крім того, в магазинах вона продається саме за такими мірками. Якщо ж буде потрібно створити рядок, на яку потрібно 10 або навіть 15 метрів, доведеться повозитися. Не можна ні за яких умов з'єднувати перший шматок з початком другого. Вважається, що 5 метрів - довжина, що показує розрахунок, при якому утримуються доріжки стрічки. Якщо навантажити стрічку, то станеться поломка, і зроблене виріб зіпсується.

Та й з боку доглянутості текстова доріжка буде некрасиво виглядати з-за нерівномірного світіння: на початку доріжці світло буде яскравим, а в кінці потьмяніє.

Провід Набір проводів для з'єднання компонентів
Плата для управління процесом На керуючу платформу поміщається мікропроцесор і інші частини для готового виробу (наприклад Трійка Шілд).

Креслення і схеми

Щоб керувати світлодіодним стрічкою, в першу чергу, знадобиться дати напругу в аноди портів з номерами від 2-х до 9. Після цього напруга подається прямо в катоди. Для цього знадобиться блок транзисторів.

Увага! На виході у платформи виходить 5 Вольт. Щоб підключити аноди в платі, необхідно використовувати резистори, які будуть працювати в 220 Ом. У той же час для підключення блоку транзисторів до виходів будуть потрібні резистори на 1 КОм.

У проект включено використання біполярних транзисторів 2N2904. Якщо підчепити все транзистори до свого контакту на матричної платформі, знадобиться всього 10 штук транзисторів. При конструюванні електронних пристроїв такий вид транзисторів найбільш популярний і підходить за всіма критеріями і умовами розробки біжучого рядка на Ардуіно. У створену систему буде подаватися невелика напруга.

Пояснимо то, як відбувається загоряння вогників на стрічці. Вибирається 1 контакт, який відповідає за подачу сигналу в анод світлодіода. На базу емітера, одночасно з попереднім дією, подається сигнал з вихідного отвору на лічильнику. Тому від колектора транзистора напруга переходить прямо в катоди світлодіодів. На матричної поверхні аноди на сусідніх рядках переплітаються з катодами сусідніх стовпців. Тому користувач може спостерігати явище, коли одночасно загоряється вся рядок, що біжить.

Є ще один варіант виконання:

Схема буде виглядати так:

програмна частина

Для першого варіанту виконання код може виглядати так:

Void setup () (int i; for (i \u003d 2; i< 10; i++) pinMode(i,OUTPUT); pinMode(clock,OUTPUT); pinMode(reset,OUTPUT); digitalWrite(reset,HIGH); delayMicroseconds(5); digitalWrite(reset,LOW); } void display_symbol(int loops) { for(x=0;x-1; y -) (byte temp \u003d symbols [x] [y]; byte temp_2 \u003d symbols [y]; byte val \u003d (temp<\u003e 7-z); for (int i \u003d 0; i<8; i++) digitalWrite(i+2, (val>\u003e I) & B00000001); delayMicroseconds (800); digitalWrite (clock, HIGH); delayMicroseconds (5); digitalWrite (clock, LOW); )))))

Програмний код для здійснення проекту "рухомого рядка на Ардуіно" у другому випадку такий:

Int RGB1 \u003d 12; int RGB2 \u003d 11; int RGB3 \u003d 10; int RGB4 \u003d 9; int RGB5 \u003d 8; int RGB6 \u003d 7; int RGB7 \u003d 6; int RGB8 \u003d 5; int RGB9 \u003d 4; int RGB10 \u003d 3; int key1 \u003d A3; int key2 \u003d A2; int key3 \u003d A1; int key4 \u003d A0; void setup () (Serial.begin (9600); pinMode (RGB1, OUTPUT); pinMode (RGB2, OUTPUT); pinMode (RGB3, OUTPUT); pinMode (RGB4, OUTPUT); pinMode (RGB5, OUTPUT); pinMode (RGB6 , OUTPUT); pinMode (RGB7, OUTPUT); pinMode (RGB8, OUTPUT); pinMode (RGB9, OUTPUT); pinMode (RGB10, OUTPUT); pinMode (key1, INPUT_PULLUP); pinMode (key2, INPUT_PULLUP); pinMode (key3, INPUT_PULLUP); pinMode (key4, INPUT_PULLUP);) void loop () (int key1Value \u003d analogRead (key1); int key2Value \u003d analogRead (key2); int key3Value \u003d analogRead (key3); int key4Value \u003d analogRead (key4); if ( key1Value<= 100) { delay(30); if (key1Value <= 100) { digitalWrite(RGB5,HIGH); digitalWrite(RGB6, HIGH); delay(50); digitalWrite(RGB4, HIGH); digitalWrite(RGB7,HIGH); delay(50); digitalWrite(RGB3, HIGH); digitalWrite(RGB8, HIGH); delay(50); digitalWrite(RGB2,HIGH); digitalWrite(RGB9, HIGH); delay(50); digitalWrite(RGB1, HIGH); digitalWrite(RGB10, HIGH); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } } if (key2Value <= 100) { digitalWrite(RGB1,HIGH); digitalWrite(RGB6, HIGH); delay(40); digitalWrite(RGB2, HIGH); digitalWrite(RGB7,HIGH); delay(40); digitalWrite(RGB3, HIGH); digitalWrite(RGB8, HIGH); delay(40); digitalWrite(RGB4,HIGH); digitalWrite(RGB9, HIGH); delay(40); digitalWrite(RGB5, HIGH); digitalWrite(RGB10, HIGH); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } if (key3Value <= 100) { digitalWrite(RGB1,HIGH); delay(90); digitalWrite(RGB1, LOW); digitalWrite(RGB2, HIGH); delay(90); digitalWrite(RGB2, LOW); digitalWrite(RGB3, HIGH); delay(90); digitalWrite(RGB3, LOW); digitalWrite(RGB4, HIGH); delay(90); digitalWrite(RGB4, LOW); digitalWrite(RGB5,HIGH); delay(90); digitalWrite(RGB5, LOW); digitalWrite(RGB6,HIGH); delay(90); digitalWrite(RGB6, LOW); digitalWrite(RGB7,HIGH); delay(90); digitalWrite(RGB7, LOW); digitalWrite(RGB8,HIGH); delay(90); digitalWrite(RGB8, LOW); digitalWrite(RGB9,HIGH); delay(90); digitalWrite(RGB9, LOW); digitalWrite(RGB10,HIGH); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } if (key4Value <= 100) { digitalWrite(RGB1,HIGH); delay(50); digitalWrite(RGB1, LOW); digitalWrite(RGB2, HIGH); delay(50); digitalWrite(RGB2, LOW); digitalWrite(RGB3, HIGH); delay(50); digitalWrite(RGB3, LOW); digitalWrite(RGB4,HIGH); delay(50); digitalWrite(RGB4, LOW); digitalWrite(RGB5, HIGH); delay(50); digitalWrite(RGB5, LOW); digitalWrite(RGB6, HIGH); delay(50); digitalWrite(RGB6, LOW); digitalWrite(RGB7,HIGH); delay(50); digitalWrite(RGB7, LOW); digitalWrite(RGB8, HIGH); delay(50); digitalWrite(RGB8, LOW); digitalWrite(RGB9, HIGH); delay(50); digitalWrite(RGB9, LOW); digitalWrite(RGB10,HIGH); delay(50); digitalWrite(RGB10, LOW); digitalWrite(RGB9, HIGH); delay(50); digitalWrite(RGB9, LOW); digitalWrite(RGB8, HIGH); delay(50); digitalWrite(RGB8, LOW); digitalWrite(RGB7,HIGH); delay(50); digitalWrite(RGB7, LOW); digitalWrite(RGB6, HIGH); delay(50); digitalWrite(RGB6, LOW); digitalWrite(RGB5, HIGH); delay(50); digitalWrite(RGB5, LOW); digitalWrite(RGB4,HIGH); delay(50); digitalWrite(RGB4, LOW); digitalWrite(RGB3, HIGH); delay(50); digitalWrite(RGB3, LOW); digitalWrite(RGB2, HIGH); delay(50); digitalWrite(RGB2, LOW); digitalWrite(RGB1, HIGH); delay(50); digitalWrite(RGB1, LOW); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } }

Покрокова інструкція по створенню пристрою

Алгоритм конструювання Arduino біжучий рядок:

  1. Завантажуємо код програми, описаної вище, в мікропроцесор за допомогою USB-кабелю і комп'ютера.
  2. Розміщуємо і світлодіодну стрічку на платформу управління.
  3. З'єднуємо всі деталі між собою.
  4. Включаємо харчування.

У підсумковому відео можна зрозуміти як працює другий варіант схеми:

Управління зі смартфона

Світлодіодними вогниками можна управляти зі смартфона. Для здійснення задуманого знадобляться Блютуз і спеціальний модуль - HC-06, призначений для Ардуіно. Але це вже ми зробимо в наступних уроках. Всім хороших проектів.

Для роботи з символьними графічними дисплеями пропонуємо скористатися бібліотекою LiquidCrystal яка входить в стандартний набір Arduino IDE і призначена для роботи з 8-бітного (4-бітного) паралельного інтерфейсу. Якщо Ваш дисплей підключається до Arduino по шині I2, то Вам потрібно встановити бібліотеку LiquidCrystal_I2C (більшість функцій якої повторюють функції першої бібліотеки).

Підтримувані дисплеї:

дисплей Підключення і ініціалізація
LCD1602 - символьний дисплей (16x02 символів),


#include
[ , 8 , 9 , 10 , 11 ]);
void setup () ( lcd.begin (16, 2);}

// Пояснення:

void setup () ( ОБ'ЕКТ.begin (КОЛ_СТОЛБЦОВ, КОЛ_СТРОК); )


LiquidCrystal Об'єкт (RS, E, D0, D1, D2, D3, D4, D5, D6, D7);


з інтерфейсом I2C (синій)

#include
#include
LiquidCrystal_I2C lcd (0x27 або 0x3F, 16 , 2);
void setup () ( lcd.init (); }

// Пояснення:



LCD1602 I2C - символьний дисплей (16x02 символів),
з інтерфейсом I2C (зелений)

#include
#include
LiquidCrystal_I2C lcd (0x27 або 0x3F, 16 , 2);
void setup () ( lcd.init (); }

// Пояснення:
LiquidCrystal_I2C Об'єкт (АДРЕС_I2C, КОЛ_СТОЛБЦОВ, КОЛ_СТРОК);
// АДРЕС_I2C може бути або 0x27, або 0x3F

LCD2004 - символьний дисплей (20x04 символів),
з паралельним інтерфейсом (синій)

#include
LiquidCrystal lcd (2, 3, 4, 5, 6, 7[ , 8 , 9 , 10 , 11 ]);
void setup () ( lcd.begin (20, 4);}

// Пояснення:
LiquidCrystal Об'єкт (RS, E, D4, D5, D6, D7);
void setup () (ОБ'ЕКТ.begin (КОЛ_СТОЛБЦОВ, КОЛ_СТРОК);)

// Якщо використовується 8 проводів шини даних, то вказуємо їх все
LiquidCrystal Об'єкт (RS, E, D0, D1, D2, D3, D4, D5, D6, D7);

LCD2004 I2C - символьний дисплей (20x04 символів),
з інтерфейсом I2C (синій)
#include
#include
LiquidCrystal_I2C lcd (0x27 або 0x3F, 20 , 4);
void setup () ( lcd.init (); }

// Пояснення:
LiquidCrystal_I2C Об'єкт (АДРЕС_I2C, КОЛ_СТОЛБЦОВ, КОЛ_СТРОК);
// АДРЕС_I2C може бути або 0x27, або 0x3F

# 1 Приклад

Виводимо напис на дисплей LCD1602 підключений по шині I2C. Для роботи з дисплеєм LCD2004 потрібно змінити 3 рядок на LiquidCrystal_I2C lcd (0x27,20,4);

#include // Підключаємо бібліотеку для роботи з LCD дисплеєм по шині I2C LiquidCrystal_I2C lcd (0x27,16,2); // Оголошуємо об'єкт бібліотеки, вказуючи параметри дисплея (адреса I2C \u003d 0x27, кількість стовпців \u003d 16, кількість рядків \u003d 2) // Якщо напис не з'явилася, замініть адресу 0x27 на 0x3F void setup () (// lcd.init (); // Почнемо роботу з LCD дисплеєм lcd.backlight (); // Включаємо підсвічування LCD дисплея lcd.setCursor (0, 0); // Встановлюємо курсор в позицію (0 стовпець, 0 рядок) lcd.print ( "LCD"); // Виводимо текст "LCD", починаючи з встановленої позиції курсора lcd.setCursor (0, 1); // Встановлюємо курсор в позицію (0 стовпець, 1 рядок) lcd.print ( "www.iarduino.ru"); // виводимо текст "www.iarduino.ru", починаючи з встановленої позиції курсора) // // void loop () () // Код всередині функції loop виконується постійно. Але так як ми виводимо статичний текст, нам достатньо його вивести 1 раз при старті, без використання коду loop

# 2 Приклад

Виводимо напис на дисплей LCD1602 підключений по 4-бітної паралельної шині. Для роботи з дисплеєм LCD2004 потрібно змінити 5 рядок на lcd.begin (20, 4);

#include // Підключаємо бібліотеку LiquidCrystal для роботи з LCD дисплеєм LiquidCrystal lcd (2,3,4,5,6,7); // Оголошуємо об'єкт бібліотеки, вказуючи висновки дисплея (RS, E, D4, D5, D6, D7) // Якщо використовується 8 проводів шини даних, то вказуємо (RS, E, D0, D1, D2, D3, D4, D5, D6, D7) void setup () (// lcd.begin (16, 2); // Почнемо роботу з LCD дисплеєм, вказуючи кількість (стовпців, рядків) lcd.setCursor (0, 0); // Встановлюємо курсор в позицію (0 стовпець, 0 рядок) lcd.print ( "LCD2004"); // Виводимо текст "LDC1602", починаючи з встановленої позиції курсора lcd.setCursor (0, 1); // Встановлюємо курсор в позицію (0 стовпець, 1 рядок ) lcd.print ( "www.iarduino.ru"); // Виводимо текст "www.iarduino.ru", починаючи з встановленої позиції курсора) // // void loop () () // Код всередині функції loop виконується постійно . Але так як ми виводимо статичний текст, нам достатньо його вивести 1 раз при старті, без використання коду loop

# 3 Приклад

Виводимо напис «Російська мова» на дисплей LCD1602 підключений по шині I2C:

#include // Підключаємо бібліотеку для роботи з шиною I2C #include // Підключаємо бібліотеку для роботи з LCD дисплеєм по шині I2C LiquidCrystal_I2C lcd (0x27,16,2); // Оголошуємо об'єкт бібліотеки, вказуючи параметри дисплея (адреса I2C \u003d 0x27, кількість стовпців \u003d 16, кількість рядків \u003d 2) // uint8_t symbol \u003d (// Оголошуємо масив з 6 власних символів (до і й я із и), кожен символ складається з 8 байт (0, 0,18,20,24,20,18, 0), // до (0, 0,17,19,21,25,17, 0), // і (10, 4 , 17,19,21,25,17, 0), // й (0, 0,15,17,15, 5, 9, 0), // я (0, 0,14,17, 6,17 , 14, 0), // з (0, 0,17,17,29,19,29, 0)); // и // void setup () (// lcd.init (); // Почнемо роботу з LCD дисплеєм lcd.backlight (); // Включаємо підсвічування LCD дисплея lcd.createChar (1, symbol); // Завантажуємо 1 символ "до" в ОЗУ дисплея lcd.createChar (2, symbol); // Завантажуємо 2 символ "і" в ОЗУ дисплея lcd.createChar (3, symbol); // Завантажуємо 3 символ "й" в ОЗУ дисплея lcd.createChar (4, symbol); // Завантажуємо 4 символ "я" в ОЗУ дисплея lcd.createChar (5, symbol); // Завантажуємо 5 символ "з" в ОЗУ дисплея lcd.createChar (6, symbol); // Завантажуємо 6 символ "и" в ОЗУ дисплея lcd.setCursor (0, 0); // Встановлюємо курсор в позицію (0 стовпець, 0 рядок) lcd.print ( "Pycc \\ 1 \\ 2 \\ 3 \\ 4 \\ 5 \\ 6 \\ 1" ); // Виводимо текст "Pycckій язиk", де "Pycc" написано латиницею, а "kій язиk" - символами з ОЗУ дисплея) // Якщо потрібно вивести символ з ОЗУ дисплея, то пишемо \\ і номер символу // void loop ( ) () // Код всередині функції loop виконується постійно. Але так як ми виводимо статичний текст, нам достатньо його вивести 1 раз при старті, без використання коду loop

# 4 Приклад

Виводимо час минув після старту на дисплей LCD1602 підключений по шині I2C:

#include // Підключаємо бібліотеку для роботи з шиною I2C #include // Підключаємо бібліотеку для роботи з LCD дисплеєм по шині I2C LiquidCrystal_I2C lcd (0x27,16,2); // Оголошуємо об'єкт бібліотеки, вказуючи параметри дисплея (адреса I2C \u003d 0x27, кількість стовпців \u003d 16, кількість рядків \u003d 2) // uint8_t tim_D, tim_H, tim_M, tim_S; // Оголошуємо змінні для зберігання днів, годин, хвилин і секунд. uint32_t tim; // Оголошуємо змінну для зберігання загальної кількості часу пройшов після старту. // Якщо напис не з'явилася, замініть адресу 0x27 на 0x3F void setup () (// lcd.init (); // Почнемо роботу з LCD дисплеєм lcd.backlight (); // Включаємо підсвічування LCD дисплея) // // void loop () (// // Отримуємо час що минув після старту: // tim \u003d millis () / 1000; // Отримуємо загальна кількість секунд (максимум 4 "294" 967 сек ≈ 49,7 днів). tim_S \u003d tim% 60 ; // Отримуємо секунди: залишок від ділення всіх секунд на хвилину (60 сек). tim \u003d (tim-tim_S) / 60; // Отримуємо загальна кількість хвилин. tim_M \u003d tim% 60; // Отримуємо хвилини: залишок від ділення всіх хвилин на годину (60 хв). tim \u003d (tim-tim_M) / 60; // Отримуємо загальна кількість годин. tim_H \u003d tim% 24; // Отримуємо годинник: залишок від ділення всіх годин на день (24 год). tim_D \u003d (tim-tim_H) / 24; // Отримуємо загальна кількість днів. // Виводимо час минув після старту: // if (millis ()% 1000<100){ // Условие выполняется в течении 100 первых миллисекунд каждой новой секунды. delay(100); lcd.setCursor(0, 0); // Устанавливаем курсор в позицию (0 столбец, 0 строка). lcd.print("Days: "); // Выводим текст. if(tim_D<10){lcd.print(0);} // Выводим 0 перед количеством дней. lcd.print(tim_D); // Выводим количество дней. lcd.setCursor(0, 1); // Устанавливаем курсор в позицию (0 столбец, 1 строка) lcd.print("Time: "); // Выводим текст. if(tim_H<10){lcd.print(0);} // Выводим 0 перед количеством часов. lcd.print(tim_H); // Выводим количество часов. lcd.print(":"); // Выводим символ. if(tim_M<10){lcd.print(0);} // Выводим 0 перед количеством минут. lcd.print(tim_M); // Выводим количество минут. lcd.print(":"); // Выводим символ. if(tim_S<10){lcd.print(0);} // Выводим 0 перед количеством секунд. lcd.print(tim_S); // Выводим количество секунд. } // } //

Функції, загальні для бібліотек LiquidCrystal і LiquidCrystal_I2C:

  • begin (cols, rows, ); - Ініціалізація дисплея із зазначенням кількості стовпців, рядків і розміру символу.
  • clear (); - Очищення дисплея з установкою курсору в положення 0,0 (Займає багато часу!).
  • home (); - Установка курсору в положення 0,0 (Займає багато часу!).
  • display (); - Швидке включення дисплея (без зміни даних в ОЗУ).
  • noDisplay (); - Швидке вимикання дисплея (без зміни даних в ОЗУ).
  • blink (); - Включення миготливого курсору (з частотою близько 1 Гц).
  • noBlink (); - Виключення миготливого курсору.
  • cursor (); - Включення підкреслення курсору.
  • noCursor (); - Виключення підкреслення курсору.
  • scrollDisplayLeft (); - Прокрутка дисплея вліво. Зрушення координат дисплея на один стовпець вліво (без зміни ОЗУ).
  • scrollDisplayRight (); - Прокрутка дисплея вправо. Зрушення координат дисплея на один стовпець вправо (без зміни ОЗУ).
  • leftToRight (); - Вказує надалі зрушувати становище курсору, після виведення чергового символу, на один стовпець вправо.
  • rightToLeft (); - Вказує надалі зрушувати становище курсору, після виведення чергового символу, на один стовпець вліво.
  • noAutoscroll (); - Вказує надалі вирівнювати текст по лівому краю від позиції курсора (як завжди).
  • autoscroll (); - Вказує надалі вирівнювати текст по правому краю від позиції курсора.
  • createChar (num, array ); - Запис призначеного для користувача символу в CGRAM дисплея під зазначеним номером.
  • setCursor (col, row ); - Установка курсору в позицію зазначену номером колонки і рядки.
  • print (text ); - Виведення тексту, символів або цифр на екран дисплея. Синтаксис схожий з однойменною функцією класу Serial.

Функції, реалізовані тільки в бібліотеці LiquidCrystal_I2C:

  • init (); - Ініціалізація дисплея. Повинна бути першою командою бібліотеки LiquidCrystal_I2C після створення об'єкта. Насправді ця функція є і в бібліотеці LiquidCrystal, але в тій бібліотеці вона викликається автоматично (за замовчуванням) при створенні об'єкта.
  • backlight (); - Включення підсвічування дисплея.
  • noBacklight (); - Вимкнення підсвічування дисплея.
  • setBacklight (flag ); - Управління підсвіткою (true - включити / false - вимкнути), використовується замість функцій noBacklight і backlight.

підключення:

// Для шини I2C:
#include
#include
LiquidCrystal_I2C lcd (address , col , row );
void setup () (
lcd.init ();
}

параметр:
  • address: Адреса дисплея на шині I2C - 0x27 або 0x3F
  • col:
  • row:
// Для паралельної шини з 4 проводів:
#include
LiquidCrystal lcd ( RS , E , D4 , D5 , D6 , D7 );
void setup () (
lcd.begin ( col , row );
}
параметр:
  • RS: № виведення Arduino до якого підключений висновок RS
  • E: № виведення Arduino до якого підключений висновок E
  • D0 ... D3: № висновків Arduino до яких підключені висновки D0-D3
  • D4 ... D7: № висновків Arduino до яких підключені висновки D4-D7
  • col: кількість стовпців реалізоване у дисплея
  • row: кількість рядків реалізоване у дисплея
// Для паралельної шини з 8 проводів:
#include
LiquidCrystal lcd ( RS , E , D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 );
void setup () (
lcd.begin ( col , row );
}
begin (col , row , );
Ініціалізація дисплея із зазначенням розмірів екрану і символів.
параметр:
  • col: кількість стовпців реалізоване у дисплея
  • row: кількість рядків реалізоване у дисплея
  • size: розмір символів, вказується константою:
    LCD_5x8DOTS (за замовчуванням), або LCD_5x10DOTS
/ * Для шини I2C: * / #include // Підключаємо бібліотеку для роботи з шиною I2C #include // Підключаємо бібліотеку для роботи з LCD дисплеєм по шині I2C LiquidCrystal_I2C lcd (0x3F, 20,4); // Оголошуємо об'єкт бібліотеки, вказуючи параметри дисплея (адреса I2C \u003d 0x3F, кількість стовпців \u003d 20, кількість рядків \u003d 4) // void setup () (// lcd.init (); // Почнемо роботу з LCD дисплеєм lcd.backlight (); // Включаємо підсвічування LCD дисплея ... // Виводимо інформацію, яку Ви хочете використовувати при старті) // // void loop () () // ... // Виводимо інформацію яка повинна змінюватися за алгоритмом Вашого коду) // / * Для 4 провідний паралельної шини: * / #include // Підключаємо бібліотеку LiquidCrystal для роботи з LCD дисплеєм LiquidCrystal lcd (2,3,4,5,6,7); // Оголошуємо об'єкт бібліотеки, вказуючи висновки дисплея (RS, E, D4, D5, D6, D7) // Якщо використовується 8 проводів шини даних, то вказуємо (RS, E, D0, D1, D2, D3, D4, D5, D6, D7) void setup () (// lcd.begin (16, 2); // Почнемо роботу з LCD дисплеєм, вказуючи кількість (стовпців, рядків) ... // Виводимо інформацію, яку Ви хочете використовувати при старті) / / // void loop () () // ... // Виводимо інформацію яка повинна змінюватися за алгоритмом Вашого коду) //

Функції управління дисплеєм:

display ();
Включає дисплей після того як він був вимкнений функцією noDisplay.
Примітка: Функція виконується швидко і без змін в ОЗУ дисплея.
noDisplay ();
Вимикає дисплей.
Дані на дисплеї будуть відображатися до виклику функції display, але і не зітруться з пам'яті ОЗУ, а після виклику функції display, знову будуть відображатися.
Примітка: Функція виконується швидко і без змін в ОЗУ дисплея.
scrollDisplayLeft ();
Зрушує координати дисплея на один стовпець вліво.



scrollDisplayRight ();
Зрушує координати дисплея на один стовпець вправо.
Постійний виклик даної функції створить ефект біжучого рядка.
Координати зсуваються як для наявної на дисплеї інформації, так і для тієї, яка буде виведена після.
Примітка: Функція виконується без змін ОЗУ дисплея.
Якщо викликати функцію 40 раз поспіль, то координата повернеться в початкову точку
clear ();
Очищення дисплея з установкою курсору в положення 0,0.
Інформація наявна на дисплеї безповоротно зітреться.
Примітка: Займає багато часу.
backlight ();
Включення підсвічування дисплея.
noBacklight ();
Вимкнення підсвічування дисплея.
Примітка: Функція реалізована тільки в бібліотеці LiquidCrystal_I2C.
setBacklight (flag );
Управління підсвічуванням (замість функцій noBacklight і backlight).
параметр:
  • flag: значення true - включає, а false - вимикає підсвічування.
Примітка: Функція реалізована тільки в бібліотеці LiquidCrystal_I2C.
/ * Виводимо напис для спостереження за функціями управління дисплеєм: * / lcd.cursor (0,0); // Встановлюємо курсор в крайній верхній кут дисплея (0 стовпець, 0 рядок) lcd.print ( "iarduino.ru"); // Виводимо текст "iarduino.ru" (перша буква "i" буде знаходитися в позиції "0,0", а остання "u" в позиції "10,0", невидимий курсор в позиції "11,0") // lcd.noDisplay (); // Вимикаємо дисплей (напис зникне з дисплея) lcd.display (); // Включаємо дисплей (напис з'явиться на дисплеї в тому ж місці) lcd.scrollDisplayLeft (); // Зрушуємо координати стовпців вліво (на дисплеї буде відображатися "arduino.ru" без першої букви "i", яка вийде за межі дисплея, але залишиться в його ОЗУ) lcd.scrollDisplayRight (); // Зрушуємо координати стовпців вправо (на дисплеї буде відображатися "iarduino.ru" на тому ж місці, де і була виведена спочатку) lcd.clear (); // Чистимо дисплей (напис безповоротно зникне з дисплея) lcd.noBacklight (); // Відключаємо підсвічування дисплея lcd.backlight (); // Включаємо підсвічування дисплея lcd.setBacklight (0); // Відключаємо підсвічування дисплея lcd.setBacklight (1); // Включаємо підсвічування дисплея

Функції управління курсором:

setCursor (col , row );
Установка курсора в зазначену позицію.
параметр:
  • col: номер стовпця (починаючи з 0).
  • row: номер рядка (починаючи з 0)
home ();
Установка курсору в позицію 0,0. Працює як функція setCursor (0,0);
Примітка: Займає багато часу.
blink ();
Включення миготливого курсору.
Примітка: Курсор займає все поле символу і блимає з частотою близько 1 Гц, в тій позиції де він був встановлений раніше.
noBlink ();
Вимкнення миготливого курсору.
Примітка: Курсор стає невидимий, але його позиція зберігається.
cursor ();
Включення підкреслення курсору.
Примітка: Курсор приймає вид символу підкреслення і знаходиться в тій позиції, де він був встановлений раніше.
noCursor ();
Вимкнення підкреслення курсору.
Примітка: Курсор стає невидимий, але його позиція зберігається.
lcd.setCursor (0, 1); // Встановлюємо курсор на перший символ другого рядка (нумерація рядків і стовпців починається з 0) lcd.home (); // Встановлюємо курсор на перший символ першого рядка (як при виклику lcd.setCursor (0,0);) lcd.blink (); // Робимо курсор видимим (на місці курсору буде блимати прямокутник) lcd.noBlink (); // Робимо курсор невидимим (прибираємо миготливий прямокутник) lcd.cursor (); // Робимо курсор видимим (на місці курсору з'явиться знак підкреслення) lcd.noCursor (); // Робимо курсор невидимим (прибираємо знак підкреслення) // Якщо курсор потрапляє на місце де є символ, то цей символ жевріє

Функції вказують напрямок і вирівнювання:

leftToRight ();
Вказує, що після кожного нового символу, положення курсору має зсуватися на один стовпець вправо.
Примітка: Якщо вивести текст "abc" на дисплеї відобразиться "abc" і текст буде знаходитися праворуч від початкового положення курсора.
(Як зазвичай)
rightToLeft ();
Вказує, що після кожного нового символу, положення курсору має зсуватися на один стовпець вліво.
Примітка: Якщо вивести текст "abc" на дисплеї відобразиться "cba" і текст буде знаходитися лівіше від початкового положення курсора.
(Писемність справа наліво)
noAutoscroll ();
Вказує, що в подальшому, текст потрібно вирівнювати по лівому краю від початкової позиції курсора.
Примітка: якщо встановити курсор в позицію 10,0 і вивести текст, то в даній позиції буде знаходитися перший символ виведеного тексту.
(Як зазвичай)
autoscroll ();
Вказує, що в подальшому, текст потрібно вирівнювати по правому краю від початкової позиції курсора.
Примітка: якщо встановити курсор в позицію 10,0 і вивести текст, то в даній позиції буде знаходитися курсор.
(Координати дисплея будуть зрушені вліво, як ніби Ви викликали функцію scrollDisplayLeft стільки раз, скільки букв в виведеному тексті)
lcd.leftToRight (); // Вказуємо курсору зрушуватися вправо (Як завжди в європейській писемності) lcd.clear (); lcd.setCursor (5,0); lcd.print ( "ABC"); // На дисплеї побачимо: "ABC" (Після "A" курсор зрушився вправо і вивелася "B", далі курсор зрушився вправо і вивелася "C") lcd.rightToLeft (); // Вказуємо курсору зрушуватися вліво (Як в писемності справа наліво) lcd.clear (); lcd.setCursor (5,0); lcd.print ( "ABC"); // На дисплеї побачимо: "CBA" (Після "A" курсор зрушився вліво і вивелася "B", далі курсор зрушився вліво і вивелася "C") lcd.noAutoscroll (); // Встановлюємо вирівнювання по лівому краю (Як завжди) lcd.clear (); lcd.setCursor (5,0); lcd.print ( "ABC"); // На дисплеї побачимо: "ABC" (Як завжди) lcd.autoscroll (); // Встановлюємо вирівнювання по правому краю (Координати дисплея будуть зрушені вліво на кількість виведених символів) lcd.clear (); lcd.setCursor (5,0); lcd.print ( "ABC"); // На дисплеї побачимо: "ABC" (Координати дисплея будуть зрушені на 3 символу вліво, так як після кожного символу відбувається виклик функції scrollDisplayLeft)

Можна вводити текст і символів:

createChar (num, array);
Запис призначеного для користувача символу в CGRAM дисплея під зазначеним номером.
Якщо Ви хочете вивести текст (функцією print) в якому повинен знаходитися встановлений Вами символ, вкажіть слеш і номер під яким був записаний цей символ: print ( "C \\ 1MBO \\ 2").
параметр:
  • num: номер під яким буде записаний символ.
  • array: масив представляє записується символ.
Примітка: Масив складається з декількох байт, кількість яких дорівнює кількості рядків в символі. Кожен встановлений біт байта відповідає встановленим (псевдонімом) пікселя символу.
print (text);
Виведення тексту, символів або цифр на екран дисплея.
параметр:
  • text: символ, число або рядок для виведення на дисплей.
Примітка: Синтаксис схожий з однойменною функцією класу Serial.
#include // Підключаємо бібліотеку для роботи з шиною I2C #include // Підключаємо бібліотеку для роботи з LCD дисплеєм по шині I2C LiquidCrystal_I2C lcd (0x27,16,2); // Оголошуємо об'єкт бібліотеки, вказуючи параметри дисплея (адреса I2C \u003d 0x27, кількість стовпців \u003d 16, кількість рядків \u003d 2) // uint8_t symbol_d \u003d (0b00000, // 1 рядок символу "д" 0b00000, // 2 рядок символу "д "0b00110, // 3 рядок символу" д "0b01010, // 4 рядок символу" д "0b01010, // 5 рядок символу" д "0b01010, // 6 рядок символу" д "0b11111, // 7 рядок символу" д "0b10001); // 8 рядок символу "д" Весь масив можна записати одним рядком: uint8_t symbol_d \u003d (0,0,6,10,10,10,31,17); // uint8_t symbol_i \u003d (0b00000, // 1 рядок символу "і" 0b00000, // 2 рядок символу "і" 0b10001, // 3 рядок символу "і" 0b10011, // 4 рядок символу "і" 0b10101, // 5 рядок символу "і" 0b11001, // 6 рядок символу "і" 0b10001, // 7 рядок символу "і" 0b00000); // 8 рядок символу "і" Весь масив можна записати одним рядком: uint8_t symbol_i \u003d (0,0,17,19,21,25,17,0); void setup () (// lcd.init (); // Почнемо роботу з LCD дисплеєм lcd.backlight (); // Включаємо підсвічування LCD дисплея lcd.createChar (1, symbol_d); // Завантажуємо в пам'ять дисплея перший символ lcd .createChar (2, symbol_i); // Завантажуємо в пам'ять дисплея другий символ lcd.clear (); // Чистимо екран lcd.setCursor (0,0); // Встановлюємо курсор в крайній верхній кут lcd.print ( "Pa \\ // void loop () (// lcd.setCursor (0,1); lcd.print ( ""); // стираємо всю нижню рядок lcd.setCursor (0,1); lcd.print ( "i"); lcd.print ( "arduino"); lcd.print ( ". ru"); // виводимо текст "i" "arduino" ".ru" в нижньому рядку delay (2000); // чекаємо 2 секунди lcd.setCursor ( 0,1); lcd.print ( ""); // стираємо всю нижню рядок lcd.setCursor (0,1); lcd.print (12.345); // виводимо число 12.34 (виводиться 2 знака після коми) delay (2000 ); // чекаємо 2 секунди lcd.setCursor (0,1); lcd.pri nt ( ""); // стираємо всю нижню рядок lcd.setCursor (0,1); lcd.print (12, HEX); // виводимо число 12 у вигляді шестнадцатиричного числа delay (2000); // чекаємо 2 секунди lcd.setCursor (0,1); lcd.print ( ""); // стираємо всю нижню рядок lcd.setCursor (0,1); lcd.print (1); // виводимо число 1 delay (2000); // чекаємо 2 секунди)