Не выводится текст на lcd дисплей ардуино

Обновлено: 06.07.2024

Осилил вывод текста на ЖК-индикаторы. Тема эта далеко не новая, в той же книжке Джереми Блума она подробнейшим образом освещена. Посему я полагаю, что многим любителям электроники она уже знакома. Так что, постараюсь осветить тему предельно коротко, чисто чтобы иметь шпаргалку у себя под рукой, и, быть может, заинтересовать пару читателей, еще не знакомых с ЖК-индикаторами.

Для экспериментов я использовал индикатор MT-16S2H-3YLG с подсветкой, шириной 16 символов и высотой 2 строки. Бывают аналогичные индикаторы от других производителей и других размеров, например, 20 x 4. Все они устроены абсолютно одинаково, и описанные далее шаги должны работать и для них. У моего индикатора 16 контактов. У вашего их может быть 14, если индикатор не имеет подсветки.

Fun fact! Помимо ЖК-индикаторов еще существуют совместимые с ними OLED-индикаторы от Winstar. Они существенно дороже, зато имеют угол обзора почти 180 градусов, более высокую скорость перерисовки и всегда поддерживают русский язык (у обычных ЖК-индикаторов это зависит от производителя). К тому же, есть OLED-индикаторы с поддержкой графического режима. Подробности об OLED-индикаторах вы можете найти в статьях Юрия Ревича (раз и два).

Подобные индикаторы очень распространены. Вы можете заметить их в кассовых аппаратах, в устройствах для считывания банковских карт, и так далее. Если не ошибаюсь, еще не так давно подобного рода индикаторы использовались в пейджерах. Оттого и интересно разобраться, как с ними работать. Во всяком случае, если вам нравиться понимать, что происходит внутри электроники.

Для использования индикатора потребуется впаять в него гребенку с шагом 2.54 миллиметра. Советую делать это, воткнув гребенку в макетную плату. Нужно это для того, чтобы штырьки после пайки остались стоять абсолютно прямо и за счет этого вставлялись в макетную плату и вынимались из нее без прикладывания особых усилий. Если у вашего индикатора, как и у моего, есть встроенная подсветка, то сбоку вы можете заметить анод и катод подсветки. К ним припаивать ничего не нужно, так как эти контакты выходят и на гребенку тоже.

Результат будет выглядеть как-то так:

ЖК-индикатор со впаянной в него гребенкой

Теперь соберем Arduino на макетной плате. Если вы подзабыли, как это делается, ознакомьтесь с заметкой Как собрать Arduino прямо на макетной плате. Ну или просто используйте Arduino Uno, если вам так больше нравится.

Далее втыкаем в макетку индикатор. Разберемся, какой контакт для чего нужен, подключая их по одному справа налево:

Для контактов RS, E и DB4-DB7 вы можете использовать другие пины. Но учтите, что в этом случае вы рискуете получить вместо текста мусор. Я так понял, что это связанно с активностью бутлоадера при перезапуске микроконтроллера.

Цепь в собранном виде будет выглядеть как-то так:

Пример вывода текста на ЖК-индикатор в Arduino

Как несложно заметить, в данном примере на основе индикатора был сделан секундомер. С его помощью очень удобно следить, скажем, за временем, прошедшим с начала записи очередного эпизода подкаста. В отличие от секундомера в iPhone, этот не гаснет то и дело. И в отличие от встроенного секундомера в Mumble, он переживает сетевые разрывы. При сильном желании в него несложно добавить и отображение числа слушателей онлайн.

Построчно код описывать не буду. Мне кажется, он довольно простой. Обращу внимание лишь на пару моментов.

Заметьте, что выводимая строка дополняется пробелами до 16-и символов. Так сделано по той причине, что сам индикатор не очищает строку при выводе новых символов. Чтобы на нем не осталось символов от предыдущей строки, мы затираем их все пробелами.

Без них последовательность \xe6ee была бы воспринята, как один символ, а не три.

Полную версию исходников к этому посту вы найдете на GitHub. Вопросы и дополнения, как обычно, всячески приветствуются.

GIMP в меню вместо текста выводит квадраты
Всем привет! GIMP, установленный под KDE 4.0 вместо текста меню и в окне загрузки выводит.

Выводит в консоль вместо русских букв квадраты
Добрый день. Подскажите пожалуйста, почему в Netbeans вместо русских букв задаваемых через консоль.


Составьте программу, которая выводит на экран квадраты N первых натуральных чисел.
Конец четверти, учитель напряг))))) 1. Составьте программу, которая выводит на экран квадраты N.

ArtSmm, убедительно прошу соблюдать правила форума
п 4.11
Картинки и любые другие файлы загружайте на форум, во избежание их удаления или потери на сторонних ресурсах. По этой же причине коды программ также должны находиться на форуме. А покрутить резистор контраста на i2c-переходнике не помогает? к сожалению, он выкручен до предела. Вроде все библиотеки попробовал, все равно таже ерунда. Ну, это неправильный ответ. Правильный — крутил туда-сюда, глядя на экран, текста не видно ни при каких положениях.
А во-вторых, если пытаешься разобраться с экраном, то и надо использовать скетч, который работает только с экраном. Как можно проще, например, выводит hello world. Зачем нам все эти датчики и сервы?
К сожалению i2c-адаптера у меня нет, попробовать сам не могу. я крутил, кроме яркости ничего не меняется) Поэтому я сократил ответ до сути. Квадраты остаются на месте. Я пробовал и в отдельности ставить, брал чистый скетч, закачивал в него "привет мир", потом включал экран - результат тот же. Экран не реагирует даже на простую команду включения и отключения подсветки lcd.backlight();
Как вариант можно попробовать узнать адрес устройства на шине I2C, но я не очень представляю как это сделать Ну вот, например, такой скетч. Подключение обычно — SCL на A5, SDA на A4
По сбросу должен в терминал выводить все найденные адреса. У меня работает с гироскопом.

Спасибо)) i2c scanner уже запустил, показал мое устройство по адресу 0*3F. Добился мигающего курса в правом верхнем углу) разбираюсь дальше

Добавлено через 22 минуты
Вопрос решен. Дело было в адресе устройства и в библиотеке


Написать программу,которая выводит на экран квадраты всех целых чисел от 7 до 20
Написать программу,которая выводит на экран квадраты всех целых чисел от 7 до 20.


Напишите программу, которая выводит на экран квадраты целых чисел от числа a до числа b
Turbo Pascal. Напишите программу, которая выводит на экран квадраты целых чисел от числа a до числа.


Программа выводит на экран адреса вместо элементов матрицы
Мне надо написать программу выводящую на экран квадратную матрицу. Ее размер полей ввожу с.

Вывести на экран эти квадраты, выделить другим цветом квадраты с максимальной и минимальной площадью
Помогите с заданием : В файле задано квадраты координатами диагоналей. Вывести на экран эти.

Все давно привыкли, что у каждого электронного устройства есть экран, с помощью которого оно дает человеку всякую полезную информацию. MP3-плеер показывает название играемого трека, пульт квадрокоптера отображает полетную телеметрию, даже стиральная машина выводит на дисплей время до конца стирки, а на смартфоне вообще размещается целый рабочий стол персонального компьютера!

Скорее всего, вашему очередному устройству тоже не помешает какой-нибудь небольшой дисплейчик 🙂 Попробуем сделать простые электронные часы! А в качестве табло используем распространенный и дешевый символьный жидкокристаллический дисплей 1602. Вот прямо такой, как на картинке:

ЖК дисплей и DHT11 на Ардуино

Кроме 16х2, достаточно популярным считается символьный дисплей 20х4 (четыре строки по 20 символов), а также графический дисплей с разрешением 128х64 точек. Вот они на картинках:

AMC2004A-B-Y6WFDY_arduino_10

CFAG12864BYYH

Подключение символьного ЖК дисплея 1602

У дисплея 1602 есть 16 выводов. Обычно они нумеруются слева-направо, если смотреть на него так как на картинке. Иногда выводы подписываются, типа: DB0, DB1, EN и т.п. А иногда просто указывают номер вывода. В любом случае, список выводов всегда одинаковый:

Принципиальная схема подключения дисплея к Ардуино Уно

lcdx1&potx1_схема

Внешний вид макета

lcdx1_bb

На всякий случай еще и в виде таблички:

ЖК дисплей 16021246111213141516
Ардуино УноGND+5V456789+5VGND

Для работы с ЖК дисплеями различных размеров и типов, в редакторе Arduino IDE имеется специальная библиотека LiquidCrystal. Чтобы подключить библиотеку, запишем первой строчкой нашей программы следующее выражение:

Далее, нам потребуется указать какие выводы Ардуино мы использовали для подключения дисплея. Эту информацию мы укажем при инициализации модуля:

Напоминаю, в нашем дисплее имеется две строки, по 16 символов в каждой.

Полностью программа будет выглядеть так:

Загружаем её на Ардуино Уно, и смотрим что творится на дисплее. Может быть три основных ситуации 🙂

Программируем часы

Теперь когда дисплей точно работает, попробуем превратить наше нехитрое устройство в настоящие электронные часы.

Здесь все понятно: часы, минуты, секунды, месяц, число, год.

Для вывода даты используем кучу функции:

А еще нам нет смысла выводить данные на дисплей чаще чем раз в секунду, поэтому между двумя итерациями сделаем паузу в 1000 миллисекунд.

Итак, сложив все вместе, получим такую программу:

Загружаем скетч на Ардуино Уно, и наблюдаем за ходом часиков! 🙂 Для того чтобы закрепить полученные знания, рекомендую прокачать наши часы до полноценного будильника. Всего-то на всего потребуется добавить пару кнопок и зуммер 🙂

  • Если дисплей показывает чёрные прямоугольники или пустой экран – крутим контраст
  • Если кроме чёрных прямоугольников и пустого экрана ничего не видно – меняем адрес в программе.

Смена адреса на 0x3f, как и д.б., приводит к тому, что дисплей перестает мигать подсветкой, так как команд не получает.

Ардуинка питается от USB, дисплей - от ардуинки (5v), может ему такого напряжения мало?

++:
Подавал питание от 5 до 15 вольт (ЛБП) - ничего не изменилось, во всем диапазоне контрастностей дисплей выводит черные квадраты или пустоту.

ТехнарьКто

Скетч у Вас рабочий. Напряжения в 5V должно быть достаточно. Встречал один раз, что при питании через стабилизатор ардуины как в Вашем случае, питания дисплею не хватало. Нехватка напряжения питания была в том, что окисленные контакты проводов и макетной платы приводили к большому падению напряжения. Подсветка работала, а вместо информации были черные квадраты. Изменение напряжения питания на Vin до стабилизатора напряжения на ситуацию не влияет. Просто подал 5V на дисплей (массы объединить обязательно) и все заработало.

SarmatK

Спасибо, попробую питать их отдельно. А макетка действительно так себе - очень слабенько держатся в ней проводки из набора.

Запараллелил питание - ардуинка и дисплей питаются от БП из набора, напряжение на дисплее = 5.28V. но на дисплее по-прежнему либо пусто, либо черные знакоместа в первой строке.

++: Закомментировал строку "lcd.init();" и получил тот же самый моргающий экран с квадратами - то есть, ошибка может заключаться в программе, а не в схеме. Как узнать, какую именно библиотеку использует IDE? Может какой-то конфликт возникает. Функции не из той либы, например.

Старик Похабыч

Если @ТехнарьКто пишет, что скетч рабочий, то скорее всего он проверил его. Так что искать в проводах и настройках. Фото хоть сделайте того , что показывает. И фото дисплея с 2-х сторон

bort707

в конце компиляции ИДЕ выдает список всех использованных в скетче библиотек, если у вас стоит галочка "показывать вывод компилятора"

SarmatK

Если @ТехнарьКто пишет, что скетч рабочий, то скорее всего он проверил его. Так что искать в проводах и настройках.

Я не на скетч грешу, а на подключение библиотеки. После включения подробного вывода, я увидел предупреждения о задвоившихся определениях членов класса "LiquidCrystal_I2C" - вот тут, наверное, собака и порылась.

в конце компиляции ИДЕ выдает список всех использованных в скетче библиотек, если у вас стоит галочка "показывать вывод компилятора"

Спасибо, поставил галочку и увидел кучу варнингов. Буду разбираться.

Вот фото во время работы и дисплея с двух сторон.

ТехнарьКто

SarmatK

IamNikolay

@SarmatK, раз подсветка работает, то проблема с контрастностью, возможно потенциометр бракованный, мультиметром проверить не мешает что на пин дисплея приходит

SarmatK

@SarmatK, раз подсветка работает, то проблема с контрастностью, возможно потенциометр бракованный, мультиметром проверить не мешает что на пин дисплея приходит На пин приходит от 0 до 5 вольт, в зависимости от положения ротора. Так и должно быть?

IamNikolay

1626428137275.jpg

@SarmatK, да, возможно дело в контактах, отмойте флюс и прозвоните сами контакты, а не просто пины

Геннадий П

Вот это очень зря. Дисплей у тебя подключен к +5 ардуины, а он идет напрямую и поэтому он мог вполне не выдержать такого издевательства.

ТехнарьКто

Вы почему-то считаете, что мы тут экстрасенсы? Понял, что уровень ваш много ниже начального. В общем идите Вы в сад. В смысле детский, для ардуинщиков. Сначала прошиваете стандартный блинк "Blink" из примеров. Если светодиод мигает. Это подтвердит, что Вы смогли правильно настроить порт и научились прошивать простейшие скетчи. Затем прошиваете "Здравствуй мир" в примерах это "Hello World". Вот когда это у Вас получиться, тогда и поговорим.

@SarmatK, раз подсветка работает, то проблема с контрастностью, возможно потенциометр бракованный, мультиметром проверить не мешает что на пин дисплея приходит На фото отчетливо видно, с контрастностью все хорошо. Пусть научиться запускать стандартные примеры из стандартных библиотек, а не любит мозг сообществу самодельными скетчами.

IamNikolay

@ТехнарьКто, если выкрутить контрастность на максимум такие же прямоугольники и получатся, разве что под определенным углом символы видны будут, так что по 1 фото так не определить.
Видно что светодиод(13) горит, значит все же ардуино прошивается.

Старик Похабыч

@SarmatK,
Ниже 3 фото LCD , тоже, только графическое.
1) фото сделано при максимально выкрученном в одну сторону потенциометре.
2) Тоже положение, только под углом.
3) Нормально настроенный
4) не сделал, это выкручено в другую сторону, экран совсем пустой.

1626451972120.jpg

Как вариант попробовать поработать без модуля i2c , подключив по параллельному интерфейсу.

ТехнарьКто

Вижу, что мысль о важности первоначальных проверок, просто пролетела у всех мимо ушей.

Какие бывают Linux?

Бывают для аппаратной части процессоров
1) x86 операционные системы 32bit
2) x86 операционные системы 64bit
3) ARM операционные системы 32bit
4) ARM операционные системы 64bit.

Для x86 это всем привычные
1) настольные компьютеры
2) ноутбуки
Для процессоров ARM
3) смартфоны (телефоны)
4) планшеты
5) ноутбуки
6) всякие Raspberry.

Для телефонов соответственно IDE могут быть разные, например глюкавое ArduinoDroid.

IDE для Linux теоретически может быть любое для C, С++ но скетчи под это дело надо переделывать в нормальный код, это уже не ArduinoIDE для новичков.

Eclipse
Bluefish
NetBeans
Komodo IDE
Anjuta
MonoDevelop
CodeLite
Kdevelop
и еще много всякого. А вот что умудрился использовать вопрошающий, загадка.

Может быть использовано и ArduinoIDE но работать будет не на всех Linux.

Для ArduinoIDE разных версий, совместимость скетчей отсутствует, почему так происходит придумайте сами.
Например на совершенно рабочий скетч ArduinoIDE стала выдавать ошибку компиляции "'prog_char' does not name a type", оказывается просто изменили 'prog_char' и теперь надо просто 'char'. А формально оба скетча рабочие, просто прошиваться будут только на разных версиях ArduinoIDE. И это относиться не просто к скетчам, а и к библиотекам. Взяли скрестили новую версию библиотеки со старым ArduinoIDE или наоборот старую библиотеку с новой версией ArduinoIDE и работать скетч уже не будет. Поэтому. Установили в какой-то операционной системе какую то IDE. Написали по какому то примеру какой то скетч, а не работает. То ли с железом проблема. То ли программы сорятся. То ли ошибок в скетче понаделали. Если скетч старый и рабочий, а у Вас стоит ArduinoIDE с новыми правилами написания скетчей, все равно формально скетч рабочий - просто факт.
И какая ситуация конкретно у спрашивающего, форуму не ведомо. Для начинающих. Установили в чем-то какой-то IDE. Запускаете из примеров Blink. Меняете частоту вспышек. Убеждаетесь, что эти изменения вызваны Вашими действиями. Это Важный шаг. Не надо этот шаг пропускать, типа и так все понятно и просто. Если лампочки на ардуинке мигают то это говорит о том, что какой то процесс идет. Но не говорит о том, что все правильно сделано. При этом может и не работать. Шаг следующий. Устанавливаете или используете установленную библиотеку. Запускаете примеры из этой библиотеки. Разбираетесь почему не работает. И только после того, как убедитесь, что Ваше устройство (в данном случае дисплей) работает на примерах из библиотеки, начинаете с этим делать что то свое. И не раньше. А вопросы не работает стандартное, совсем другая тема.
Если хотите адекватный ответ, пишите операционную систему полностью. Версию IDE полностью. Версию использованной библиотеки полностью. Работала ли первоначальная проверка вспышкой и стандартные примеры на используемой библиотеке.

PS Когда захотел помочь. Получилось как обычно. Думаешь одно, а все совсем иначе. А вопрошающий считает, что вокруг одни экстрасенсы и всю дополнительную информацию про него обязаны знать.

Читайте также: