Попробуем подключить ЖК - индикатор и вывести на него текст. В iDE есть уже библиотеки, которые обеспечивает обмен данными по I2C (Wire.h) и вывод текста, только на английском языке (LiquidCrystal_I2C.h). Заходим в Файл, Примеры, LiquidCrystal, HellWorld
Вот что увидим:
А картина-то не тривиальная. Программа компилируется и загружается абсолютно нормально, только вот в ней есть ошибка. И она вот в этой строке: LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
В комментарии написано: "установите адрес ЖК-дисплея на 0x27 для отображения 16 символов и 2 строк", а теперь сравните цифры с теми. что написаны в скобках (0x27,20,4). Адрес дисплея 0х27 - совпадает, а вот дальше .. В скобках цифра 20, а в комментарии 16 - это количество знаков в строке; в скобках далее цифра 2, а в комментарии 4 - это количество строк на дисплее. Т.е. программа предназначена для вывода текста на дисплей с 4-мя стоками по 20 символом в каждой.
При установке позиции курсора lcd.setCursor(3,0); первая цифра в скобках - это номер символа, точнее знакоместа, в строке (начинается с 0), вторая цифра - это номер строки, также начинается с 0. В данном случае курсор стоит на 4-м знакоместе в первой строке. Если вы посмотрите похожие строки ниже а программе, то увидите номера строк 1, 2, 3, т.е. строк -4.
Но самое интересное, эта программа спокойно загружается в дисплей 1602 и запускается. Вот результат.
Но отражаются только две строки, а других двух нет. Кроме того, в слове Arduino отсутствует буква "о" - на нее не хватило места :)). Но программа легко корректируется: убираем ненужные строки, сдвигаем надписи влево.
//YWROBOT
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h> // библиотека для передачи данных по I2C
#include <LiquidCrystal_I2C.h>
// создаем объект LiquidCrystal_I2C lcd() для дисплея 2 строки по 16 знакомест. LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
lcd.init(); // инициируем дисплей
lcd.backlight(); // включаем подсветку
lcd.setCursor(2,0); // устанавливаем курсор на третье знакоместо первой строки lcd.print("Hello, world!"); // выводим текст, заключенный в кавычки lcd.setCursor(0,1); // устанавливаем курсор на первое знакоместо второй строки lcd.print("Ywrobot Arduino!"); } void loop() {}
Вот результат.
Интересная особенность этой программы - это то. что цикл void loop() пустой. Это допустимо, так как текст, выводимый на дисплей и его положение не будет меняться и все это задается в установках. Программа будет работать точно также, если программу изменить вот так:
void setup() {
lcd.init(); // инициируем дисплей
lcd.backlight(); // включаем подсветку
} void loop() {
lcd.setCursor(2,0); // устанавливаем курсор на третье знакоместо первой строки lcd.print("Hello, world!"); // выводим текст, заключенный в кавычки lcd.setCursor(0,1); // устанавливаем курсор на первое знакоместо второй строки lcd.print("Ywrobot Arduino!");
}
Теперь попробуем вывести на дисплей кириллицу. Для этого нужно подключить библиотеку LCD_1602_RUS.h. Тут мне пришла мысль попросить написать эту маленькую программу по выводу кириллического текста ИИ GigaCht.
Конечно, ИИ тут же рассказал, как подключить дисплей к Ардуино и выдал текст программы.
Но у меня была другая библиотека - LCD_1602_RUS и я попросил изменить программу.
Программа при компиляции выдает ошибку в пятой строке. Сообщаю это ИИ и получаю ответ:
И предложил изменить адрес дисплея.
Увы, результат тот же, ошибка в пятой строке. Присмотрелся к тексту программы внимательнее и нашел ошибку. Указываю на нее ИИ.
"... если библиотека .... ожидает ..." - т.е. ИИ не удосужился проанализировать требования библиотеки. Какой-то не очень интеллектуальный интеллект :)). А так как интеллектов хватает, то я обратился к Chat GPT. Он с первого раза выдал работающую программу:
Этот вариант программы хоть и оказался рабочим, но тоже был оригинальным: адрес индикатора задавался в виде постоянной, вместо того, чтобы просто записать его.
А вот при выводе текста наоборот, сэкономил строчку, и не задал положение курсора в первой строчке.
Интересно, что когда я попросил Chat GPT выводить текст программы в на белом фоне, он ответил, что не может этого сделать. А жаль.
Ну а дальше, скрестив "ужа с ежом" написал текст своей программы:
// Мой текст программы.
#include <Wire.h> // библиотека для обмена данными по I2C
#include <LCD_1602_RUS.h> // библиотека для вывода латиницы и кириллицы
// Создаем объект класса LCD_1602_RUS с указанием адреса дисплея 0х27 и
//размером (16 знакомест в строке, 2 строки)
LCD_1602_RUS lcd(0x27, 16, 2);
void setup() {
lcd.init(); // Инициализируем дисплей
lcd.backlight(); // Включаем подсветку }
void loop() { // Выводим текст на экран:
lcd.setCursor(4, 0); // Устанавливаем позицию курсора на первую строку lcd.print("*RA3AKU*"); // Выводятся латинские буквы
lcd.setCursor(2, 1); // Устанавливаем позицию курсора на вторую строку lcd.print("радио любитель"); // Выводятся русские буквы
}
Компиляция и загрузка прошли отлично, включилась подсветка, но никакого текста на дисплее не было.
Что такое? А это я просто подключил новый дисплей, а в этом случае подстроечный резистор на модуле I2C находится в среднем положении, и контраст изображения мал.
Берем отверточку и поворачиваем ось резистора. Вот и показалась надпись.
Добавляем еще контраста.
Вот теперь все отлично.
Так что мнение о том, что ИИ по первому хотению напишет то, что нужно, особенно по запросу типа "Напиши программу для управления КВ-трансивером", то то, что он вам напишет вам не понравится. ИИ требует четких вопросов, а чтобы их задать, нужно иметь представление и о программировании и о железе.
Всем здоровья и успехов!