![Контрол на LCD 2004 чрез сериен интерфейс с Arduino](http://ardudevelop.eu/wp-content/uploads/2025/01/Контрол-на-LCD-2004-чрез-сериен-интерфейс-с-Arduino.jpg)
Въведение
В този проект ще разгледаме как да създадем информационен дисплей, базиран на Arduino и LCD 2004, който може да се контролира чрез сериен интерфейс. Проектът е универсален и може да бъде интегриран с персонални компютри чрез USB-TTL преобразувател, което го прави идеален за различни приложения като информационни панели, IoT устройства и други системи за визуализация на данни. В бъдеще ще предложим и библиотеки за Python и Shell, които значително ще улеснят интеграцията.
Как работи проектът
Arduino платката получава команди през сериен интерфейс. Командите задават текст, който да се изобрази на определен ред от дисплея, или дават инструкции за изчистване на целия екран или на конкретен ред. Системата работи със стандартен LCD 2004 дисплей, който използва LiquidCrystal библиотеката за управление.
![Arduino контрол на LCD 2004 чрез сериен интерфейс pic 1](http://ardudevelop.eu/wp-content/uploads/2025/01/Arduino-контрол-на-LCD-2004-чрез-сериен-интерфейс-pic-1.jpg)
![Arduino контрол на LCD 2004 чрез сериен интерфейс pic 2](http://ardudevelop.eu/wp-content/uploads/2025/01/Arduino-контрол-на-LCD-2004-чрез-сериен-интерфейс-pic-2.jpg)
![Arduino контрол на LCD 2004 чрез сериен интерфейс pic 3](http://ardudevelop.eu/wp-content/uploads/2025/01/Arduino-контрол-на-LCD-2004-чрез-сериен-интерфейс-pin-3.jpg)
В статиите ни: Управление и оптимизация на LCD 16×2 с Arduino: Сравнение на два подхода и Серийна комуникация с Arduino UNO чрез USB или Bluetooth HC-05 може да прочетете как се управлява LCD дисплей и как работи серийнат комуникация на Arduino.
Схема на свързване
Пин на Arduino | Пин на LCD |
---|---|
5 | RS |
6 | Enable |
7 | D4 |
8 | D5 |
9 | D6 |
10 | D7 |
![Arduino контрол на LCD 2004 чрез сериен интерфейс PCB](http://ardudevelop.eu/wp-content/uploads/2025/01/Arduino-контрол-на-LCD-2004-чрез-сериен-интерфейс-PCB-1024x480.jpg)
Свържете дисплея към Arduino платката според горната таблица и осигурете 5V захранване за LCD 2004 дисплея. В нашия случай сме разработили платка (PCB) която е на базата на Atmega8 (птосто такава сме имали в наличност), но спокойно може да се замести с Atmega328p която е стандартната за Arduino UNO/NANO/MINI и т.н. За програмиране на платката сме извели SPI порта на пинове, но ако вече сте инсталирали Bootloader на Arduino UNO, може да го програмирате директно през серийния порт. Описали сме тази стъпка в статията ни: Arduino UNO, а за да раберете как да програмирате Atmega8 с Arduino IDE прочетете статията ни: Arduino IDE бърз преглед.
Код на проекта: Arduino контрол на LCD 2004 чрез сериен интерфейс
#include <LiquidCrystal.h>
LiquidCrystal lcd(5, 6, 7, 8, 9, 10);
void setup() {
Serial.begin(9600);
lcd.begin(20, 4);
lcd.setCursor(0 , 0);
lcd.print("Serial LCD 20x4");
lcd.setCursor(0 , 1);
lcd.print("Serial speed 9600");
lcd.setCursor(2 , 2);
lcd.print("made by :");
lcd.setCursor(3 , 3);
lcd.print("ardudevelop.eu'");
delay(3000);
//lcd.clear();
Serial.setTimeout(20);
}
void loop() {
if (Serial.read() > 0) {
String line = Serial.readStringUntil(',');
Serial.read();
String text = Serial.readString();
Serial.println(line);
Serial.println(text);
if (line == "1") {
Serial.println(line);
lcd.setCursor(0 , 0);
lcd.print(text);
}
if (line == "2") {
Serial.println(line);
lcd.setCursor(0 , 1);
lcd.print(text);
}
if (line == "3") {
Serial.println(line);
lcd.setCursor(0 , 2);
lcd.print(text);
}
if (line == "4") {
Serial.println(line);
lcd.setCursor(0 , 3);
lcd.print(text);
}
if (line == "0.0") {
lcd.clear();
}
if (line == "0.1") {
lcd.setCursor(0,0);
lcd.print(" ");
}
if (line == "0.2") {
lcd.setCursor(0,1);
lcd.print(" ");
}
if (line == "0.3") {
lcd.setCursor(0,2);
lcd.print(" ");
}
if (line == "0.4") {
lcd.setCursor(0,3);
lcd.print(" ");
}
}
}
Обяснение на кода
Инициализация на LCD 2004
#include <LiquidCrystal.h>
LiquidCrystal lcd(5, 6, 7, 8, 9, 10);
Тук се инициализира библиотеката LiquidCrystal и се задават пиновете, към които е свързан дисплеят.
Настройка на дисплея и инициализация на серийната комуникация
void setup() {
Serial.begin(9600);
lcd.begin(20, 4);
lcd.setCursor(0 , 0);
lcd.print("Serial LCD 20x4");
lcd.setCursor(0 , 1);
lcd.print("Serial speed 9600");
lcd.setCursor(2 , 2);
lcd.print("made by :");
lcd.setCursor(3 , 3);
lcd.print("ardudevelop.eu'");
delay(3000);
//lcd.clear();
Serial.setTimeout(20);
}
Функцията setup
настройва серийната комуникация на 9600 bps и инициализира дисплея с размер 20×4 символа. Също така и изписва типа дисплей, скоростта на комуникацията и от кого е разработена идеята.
Обработка на команди
if (Serial.read() > 0) {
String line = Serial.readStringUntil(',');
String text = Serial.readString();
//...
}
Командите се получават през сериен интерфейс. Първият параметър (line
) указва реда, на който да се изобрази текстът, а вторият (text
) е самият текст. Изпоратената команда е сепарирана чрез “,” запетая, която служи за разделител между получените параметри “line” и “text“.
Команди за управление
1,ТЕКСТ
: Изобразява текста на първи ред.2,ТЕКСТ
: Изобразява текста на втори ред.3,ТЕКСТ
: Изобразява текста на трети ред.4,ТЕКСТ
: Изобразява текста на четвърти ред.0.0
: Изчиства целия дисплей.0.1
: Изчиства първия ред.0.2
: Изчиства втория ред.0.3
: Изчиства третия ред.0.4
: Изчиства четвъртия ред.
Важно: Всяка команда трябва да съдържа празно място преди текста, за да бъде правилно разчетена от системата.
Пример за команда
В серийната конзола на Arduino IDE може да пробвате различните команди като първо поставите един “space” преди командата.
2,Hello, World!
Изпращане на текст към втория ред:
Изчистване на третия ред:
0.2
Заключение
Този проект демонстрира как лесно може да се управлява LCD дисплей чрез сериен интерфейс, което го прави подходящ за различни приложения. С добавянето на Python и Shell библиотеки в бъдеще ще направим интеграцията още по-удобна. Проектът е лесен за разширяване и персонализация, което го прави чудесна основа за разработка на информационни дисплеи. Ако имате въпроси или искате да споделите подобрения, свържете се с нас!
Описание на библитеката LiquidCrystal тук, а на серийната комуникация тук.