Работаем с LCD дисплеем 1602
Всем читателям привет! Рад нашей новой встрече на
страницах блога. Спасибо вам что посещаете мои странички. Сегодня мы научимся
работать с жидкокристаллическим дисплеем (далее LCD). Так же разберемся с некоторыми
проблемами, с которыми вы можете столкнуться. А пока начнём с самого начала.
Несколько важных замечаний:
1. Дисплеи
могут отличаться количеством символов и строк. Например 1602 означает что у нас
двухстрочный дисплей с длиной строки в 16 символов. 1604 означает что у нас
четерехстрочный дисплей, с длиной строки в 16 символов.
2. Мы
будем работать с дисплеем с I2C модулем, благодаря чему
управление LCD дисплеем
будет осуществляться двумя проводами (подключенные к А4 и А5), конечно же
дисплей нужно будет еще запитать двумя проводами, которые мы подключим к пинам «земля»
и «+5В». Благодаря I2C
модулю мы избавимся от кучи проводов!
3. Для
записи скетча в плату ардуино, мы будем пользоваться программами старых версий
(1.6.4 для «Виндовс 7 или 8» и 1.6.0. для «ХР»). При использовании новой версии
1.6.7 возникает проблема – не все символы (или только один) будут выводиться на
экран дисплея. Возможно что в новых версиях эту проблему исправят)… Я предлагаю
использовать архив с уже готовой к работе программы (то есть не требует
установки на компьютер, это важно если у вас на компостере уже установлена
новая версия).
4. У
дисплея может быть другой IIC адрес, вместо 0x27 может оказаться 0x3F. Чтобы
точно определить адрес можете воспользоваться «сканером». Просто запишите скетч
«сканер» подключите дисплей и включите ардуино. Откройте окно «порта» и
посмотрите какой адрес у вашего устройства.
5. Для
работы дисплея мы будем использовать библиотеку LiquidCrystal_I2C. Если вы
используете программу из архива, то установка библиотеки не потребуется (она
уже имеется в архиве).
//
i2c_scanner
#include
<Wire.h>
void
setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial
monitor
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++
)
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if
(error == 0)
{
Serial.print("I2C device found at
address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at
address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices
found\n");
else
Serial.println("done\n");
delay(5000); // wait 5
seconds for next scan
}
Теперь приступим к сборке схемы. Все очень просто: нам
нужно подключить 4 вывода от I2C модуля к плате ардуино. При
этом подключаем выводы так: GND — GND, VCC — 5V, SDA — A4, SCL — A5. На
картинках и фотографиях все предельно понятно (поэтому в этот раз мы обойдемся
без схемы). Благодаря I2C плате мы можем управлять LCD двумя проводами. А вот какбы выглядела наша схема без этой "волшебной" платы:
А теперь самое время записать скетч в плату ардуино. Скетч выведет на экран «R6LCA RadioScout» а в нижней начнет отчет времени в секундах слева, а
справа будет «LCD 1602».
Сам скетч:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей
void setup()
{
lcd.init();
lcd.backlight();// Включаем подсветку дисплея
lcd.print("R6LCA RadioScout");
lcd.setCursor(8, 1);
lcd.print("LCD 1602");
}
void
loop()
{
// Устанавливаем курсор на вторую строку и
нулевой символ.
lcd.setCursor(0,
1);
// Выводим на
экран количество секунд с момента запуска ардуины
lcd.print(millis()/1000);
}
Как видите все действительно просто. По крайней мере изучив материал блога, у вас точно все должно получиться. Но не будем останавливаться на таком простом примере. Ведь у нас есть датчик температуры и влажности, и даже датчик атмосферного давления. Вы наверно уже догадались над чем нам предстоит еще поработать. Так что до новых встреч!
Этот комментарий был удален автором.
ОтветитьУдалитьтоже самое не пойму в чем дело
ОтветитьУдалитьЗапустил, все загрузилось. но экран просто синий, пустой. В чем дело? Пробовал много скетчей (те, которые просто выводят слова на экран, и этот с секундомером), экран на всех скетчах просто пустой и синий. В чем дело? Помогите, пожалуйста.
ОтветитьУдалитьС зади есть резистор покрутите его по часовой или против до появления изображения, все заработает
УдалитьСпасибо, Я уже разобрался!
УдалитьСейчас разбираюсь с ОLEd дисплеем i2c 0,96"
Или адрес дисплея указан не верно или как писали выше, проблема в контрасте.
ОтветитьУдалить#include
ОтветитьУдалить#include
// Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
void setup()
{
lcd.begin();
lcd.backlight();// Включаем подсветку дисплея
lcd.print("R6LCA RadioScout");
lcd.setCursor(8, 1);
lcd.print("LCD 1602");
}
void loop()
{
// Устанавливаем курсор на вторую строку и нулевой символ.
lcd.setCursor(0, 1);
// Выводим на экран количество секунд с момента запуска ардуины
lcd.print(millis()/1000);
}
Ардуино НАНО v.3
ОтветитьУдалить#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2); // Устанавливаем дисплей
void setup()
{
lcd.begin();
lcd.print("R6LCA RadioScout");
lcd.setCursor(8, 1);
lcd.print("LCD 1602");
}
void loop()
{
// Устанавливаем курсор на вторую строку и нулевой символ.
lcd.setCursor(0, 1);
// Выводим на экран количество секунд с момента запуска ардуины
lcd.print(millis()/1000);
}
Arduino: 1.8.3 (Windows Store 1.8.6.0) (Windows 10), Плата:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
ОтветитьУдалитьsketch_jun19c:1: error: #include expects "FILENAME" or
exit status 1
#include expects "FILENAME" or
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
в чём дело?
показывает только первый знак водимого текста что делать?
ОтветитьУдалитьArduino uno , windows8 , progman 1.8.4
У меня получилось под версией arduino-1.6.4
УдалитьLiquidCrystal_I2C lcd(0x3F,16,2)
работает только так но без времени
ОтветитьУдалить#include
#include
LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей
void setup()
{
lcd.init();
lcd.backlight();// Включаем подсветку дисплея
lcd.print("R");
lcd.print("6");
lcd.print("L");
lcd.print("C");
lcd.print("A ");
lcd.print(" ");
lcd.print("R");
lcd.print("a");
lcd.print("d");
lcd.print("i");
lcd.print("o");
lcd.print("S");
lcd.print("c");
lcd.print("o");
lcd.print("u");
lcd.print("t");
lcd.setCursor(8, 1);
lcd.print("L");
lcd.print("C");
lcd.print("D");
lcd.print(" ");
lcd.print("1");
lcd.print("6");
lcd.print("0");
lcd.print("2");
}
void loop()
{
// Устанавливаем курсор на вторую строку и нулевой символ.
lcd.setCursor(0, 1);
// Выводим на экран количество секунд с момента запуска ардуины
}
У меня получилось под версией arduino-1.6.4
ОтветитьУдалитьLiquidCrystal_I2C lcd(0x3F,16,2)
Всё работает
У меня проблема...
ОтветитьУдалитьВерхняя строка всегда белая, чтобы я не выводил.
Адрес поменян...
УдалитьArduino: 1.8.5 (Windows 7), Плата:"Arduino Nano, ATmega328P"
ОтветитьУдалитьC:\Users\MAX PRO222\Documents\Arduino\sketch_jan06d\sketch_jan06d.ino: In function 'void setup()':
sketch_jan06d:4: error: 'Icd' was not declared in this scope
Icd.init()
^
C:\Users\MAX PRO222\Documents\Arduino\sketch_jan06d\sketch_jan06d.ino: In function 'void loop()':
sketch_jan06d:12: error: 'Icd' was not declared in this scope
Icd.setCursor(1);
^
exit status 1
'Icd' was not declared in this scope
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Помоги пж я начинающий ардруинщик (у меня ардуино нано надеюсь это порможет)
УдалитьArduino: 1.8.10 (Windows 7), Плата:"Arduino/Genuino Uno"
ОтветитьУдалитьsketch_nov04a:1:9: error: #include expects "FILENAME" or
sketch_nov04a:2:10: error: #include expects "FILENAME" or
exit status 1
#include expects "FILENAME" or
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Блин помогите разобраться! Вот какая ошибка.
ОтветитьУдалитьArduino: 1.8.10 (Windows 7), Плата:"Arduino/Genuino Uno"
sketch_nov04b:2:10: error: LiquidCrystal_I2C.h: No such file or directory
Несколько библиотек найдено для "Wire.h"
compilation terminated.
Используется: C:\Program
exit status 1
LiquidCrystal_I2C.h: No such file or directory