Как вывести на экран ардуино
Перейти к содержимому

Как вывести на экран ардуино

  • автор:

Урок 5. Выводим показания потенциометра на LCD1602 по I2C с Ардуино

Arduino имеет в себе некоторое количество портов (Количество зависит от версии Ардиуны) с Аналого-цифровым преобразователем (АЦП).

Эта функция дает нам возможность преобразовывать входящий сигнал 0-5 В. в дискретные значения 0-1024.

Например :

2 Вольта. преобразуем в дискреты (1025/5)*2 = 410 дискрет.

Получается если мы подадим на аналоговый вход Ардуины 2 вольта, Ардуина пересчитает их и даст нам значение АЦП =~410.

С помощью потенциометра мы можем получать любое напряжение от 0 до 5 вольт. Попробуем вывести эти показания да текстовый дисплей.

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

#include #include int PotenciometrPin = A0; // select the input pin for the potentiometer int Value=0; float Value_volt=0; LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей void setup() < lcd.init(); lcd.backlight();// Включаем подсветку дисплея lcd.print("iarduino.ru"); lcd.setCursor(4, 1); lcd.print("Potenciometr"); delay(1000); >void loop() < lcd.setCursor(0, 1); lcd.print(" - ____V "); // Устанавливаем курсор на вторую строку и нулевой символ. lcd.setCursor(0, 1); // Выводим на экран значение с аналогового входа (от 0 до 1024 пропорционально от 0 В. до 5 В.) Value = analogRead(PotenciometrPin); lcd.print(Value); lcd.setCursor(7, 1); Value_volt=(float)5/1025*Value; lcd.print(Value_volt); delay(300); >

Фото:

Видео:

Текстовый экран 16×2: инструкция, примеры использования и документация

В качестве примера подключим дисплей к управляющей плате Arduino Uno.

Подключение к Arduino

Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Liquid Crystal. В ней вы найдёте примеры кода с подробными комментариями.

Вывод текста

Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:

// Библиотека для работы с текстовым дисплеем #include // Задаём имя пинов дисплея constexpr uint8_t PIN_RS = 6; constexpr uint8_t PIN_EN = 7; constexpr uint8_t PIN_DB4 = 8; constexpr uint8_t PIN_DB5 = 9; constexpr uint8_t PIN_DB6 = 10; constexpr uint8_t PIN_DB7 = 11; /* * Создаём объект для работы с текстовым дисплеем * LiquidCrystal lcd(RS, EN, DB4, DB5, DB6, DB7); * Подробности подключения: * http://wiki.amperka.ru/products:display-lcd-text-16x2 */ LiquidCrystal lcd(PIN_RS, PIN_EN, PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7); void setup() { // Устанавливаем размер экрана // Количество столбцов и строк lcd.begin(16, 2); // Устанавливаем курсор в колонку 0 и строку 0 lcd.setCursor(0, 0); // Печатаем первую строку lcd.print("Hello, world!"); // Устанавливаем курсор в колонку 0 и строку 1 lcd.setCursor(0, 1); // Печатаем вторую строку lcd.print("Do It Yourself"); } void loop() { }

Вывод текста: кириллица

Существует два способа вывода кириллицы на текстовые дисплеи:

Рассмотрим оба способа более подробно.

Таблица знакогенератора

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

Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.

Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x## встроить в строку код символа:

lcd.print("\xB1ndex");

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0-9 и A-F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две записанные рядом строки склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

lcd.print("\xB1eee"); // ошибка lcd.print("\xB1""eee"); // правильно

Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:

// Библиотека для работы с текстовым дисплеем #include // Задаём имя пинов дисплея constexpr uint8_t PIN_RS = 6; constexpr uint8_t PIN_EN = 7; constexpr uint8_t PIN_DB4 = 8; constexpr uint8_t PIN_DB5 = 9; constexpr uint8_t PIN_DB6 = 10; constexpr uint8_t PIN_DB7 = 11; /* * Создаём объект для работы с текстовым дисплеем * LiquidCrystal lcd(RS, EN, DB4, DB5, DB6, DB7); * Подробности подключения: * http://wiki.amperka.ru/products:display-lcd-text-16x2 */ LiquidCrystal lcd(PIN_RS, PIN_EN, PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7); void setup() { // Устанавливаем размер экрана // Количество столбцов и строк lcd.begin(16, 2); // Устанавливаем курсор в колонку 5 и строку 0 lcd.setCursor(5, 0); // Печатаем первую строку lcd.print("\xA8""p""\xB8\xB3""e\xBF"); // Устанавливаем курсор в колонку 3 и строку 1 lcd.setCursor(3, 1); // Печатаем вторую строку lcd.print("o\xBF A\xBC\xBE""ep\xBA\xB8"); } void loop() { }

Переключение страниц знакогенератора

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

// переключение с нулевой страницы на первую command(0x101010); // переключение с первой страницы на нулевую command(0x101000);

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

// Библиотека для работы с текстовым дисплеем #include // Задаём имя пинов дисплея constexpr uint8_t PIN_RS = 6; constexpr uint8_t PIN_EN = 7; constexpr uint8_t PIN_DB4 = 8; constexpr uint8_t PIN_DB5 = 9; constexpr uint8_t PIN_DB6 = 10; constexpr uint8_t PIN_DB7 = 11; /* * Создаём объект для работы с текстовым дисплеем * LiquidCrystal lcd(RS, EN, DB4, DB5, DB6, DB7); * Подробности подключения: * http://wiki.amperka.ru/products:display-lcd-text-16x2 */ LiquidCrystal lcd(PIN_RS, PIN_EN, PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7); void setup() { // Устанавливаем размер экрана // Количество столбцов и строк lcd.begin(16, 2); // Устанавливаем курсор в колонку 5 и строку 0 lcd.setCursor(5, 0); // Печатаем строку lcd.print("\x9b\x9c\x9d\x9e\x9f"); } void loop() { // Устанавливаем нулевую станицу знакогенератора (стоит по умолчанию) lcd.command(0b101000); // Ждём 1 секунду delay(1000); // Устанавливаем первую станицу знакогенератора lcd.command(0b101010); // Ждём 1 секунду delay(1000); }

Полную таблицу символов с кодами можно найти в документации к экрану.

Использование библиотеки LiquidCrystalRus

Совсем не обязательно мучатся со знакогенератором, чтобы вывести русский символ. Для решения проблемы скачайте и установите библиотеку LiquidCrystalRus.

Это копия оригинальной библиотеки LiquidCrystal с добавлением русского языка. Добавленный в библиотеку код трансформирует русские символы UTF8 в правильные коды для текстового экрана.

В качестве примера выведем фразу «Привет от Амперки» на дисплей.

// Библиотека для работы с текстовым дисплеем #include // Задаём имя пинов дисплея constexpr uint8_t PIN_RS = 6; constexpr uint8_t PIN_EN = 7; constexpr uint8_t PIN_DB4 = 8; constexpr uint8_t PIN_DB5 = 9; constexpr uint8_t PIN_DB6 = 10; constexpr uint8_t PIN_DB7 = 11; /* * Создаём объект для работы с текстовым дисплеем * LiquidCrystalRus lcd(RS, EN, DB4, DB5, DB6, DB7); * Подробности подключения: * http://wiki.amperka.ru/products:display-lcd-text-16x2 */ LiquidCrystalRus lcd(PIN_RS, PIN_EN, PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7); void setup() { // Устанавливаем размер экрана // Количество столбцов и строк lcd.begin(16, 2); // Устанавливаем курсор в колонку 5 и строку 0 lcd.setCursor(5, 0); // Печатаем первую строку lcd.print("Привет"); // Устанавливаем курсор в колонку 3 и строку 1 lcd.setCursor(3, 1); // Печатаем вторую строку lcd.print("от Амперки"); } void loop() { }

Примеры работы для Espruino

В качестве примера подключим дисплей к управляющей плате Iskra JS.

Arduino.ru

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

  • Войдите на сайт для отправки комментариев

Пнд, 30/03/2020 — 13:49

ЕвгенийП аватар

Зарегистрирован: 25.05.2015

1. Вставьте скетч как положено

2. Задайте интересующий Вас вопрос. «Не могу понять» — это не вопрос, а утверждение.

  • Войдите на сайт для отправки комментариев

Пнд, 30/03/2020 — 13:46
Novichek2288
Зарегистрирован: 19.08.2019

#include #include LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() < >void loop() < lcd.init(); // initialize the lcd lcd.init(); lcd.backlight(); lcd.setCursor(4,1); lcd.print(""); int readData = DHT.read11(dataPin); // DHT11 float t = DHT.temperature; // Получить значение температуры float h = DHT.humidity; // Получить значение относительной влажности // Вывод результатов в монитор последовательного порта Serial.print("Temperature = "); Serial.print(t); Serial.print(" "); Serial.print("C and "); Serial.print("Humidity = "); Serial.print(h); Serial.println(" % "); Serial.println(""); >
  • Войдите на сайт для отправки комментариев

Пнд, 30/03/2020 — 13:47
Novichek2288
Зарегистрирован: 19.08.2019

вопрос в том, как вывести значение температуры и влажности на дисплей?

  • Войдите на сайт для отправки комментариев

Пнд, 30/03/2020 — 13:52

ЕвгенийП аватар

Зарегистрирован: 25.05.2015

Блин, ну опишите Вы хоть немного, ну нельзя же так!

Что и как оно делает сейчас? Что происходит? Чем не нравится?

Какую именно библиотеку LiquidCrystal_I2C.h Вы используете? Их несколько с таким названием, ссылку давайте!

Вы полгода на форуме, а вопрос задать не можете — читайте!

  • Войдите на сайт для отправки комментариев

Пнд, 30/03/2020 — 13:54

ЕвгенийП аватар

Зарегистрирован: 25.05.2015
Novichek2288 пишет:

вопрос в том, как вывести значение температуры и влажности на дисплей?

Вот Вы сами пишете в строке №14 » lcd.print . «, а в строке №23 — » Serial .print . «. Неужели ни какие мысли не наводит?

  • Войдите на сайт для отправки комментариев

Пнд, 30/03/2020 — 14:00
Novichek2288
Зарегистрирован: 19.08.2019

Цель этого скетча в том, что он должен измерять температуру и влажность с помощью dht11, далее выводить эти значения на дисплей. На данный момент программа измеряет температуру и влажность, но вывести эти значения на дисплей у меня не получается. Библиотеку я использую https://iarduino.ru/file/134.html

  • Войдите на сайт для отправки комментариев

Пнд, 30/03/2020 — 14:03
Novichek2288
Зарегистрирован: 19.08.2019
ЕвгенийП пишет:
Novichek2288 пишет:

вопрос в том, как вывести значение температуры и влажности на дисплей?

Вот Вы сами пишете в строке №14 » lcd.print . «, а в строке №23 — » Serial .print . «. Неужели ни какие мысли не наводит?

Проблема как раз в строке номер 14, так как вывести на монитор порта значение получается, но на сам дисплей нет. Подскажите пожалуйста, что нужно вписать в строчку номер 14, чтобы значение температуры и влажности вывелось на экран.

  • Войдите на сайт для отправки комментариев

Как вывести на экран ардуино

ARDUINO вывод текста на LCD из консоли (уровень «начало»)

  • Автор темы Rad89
  • Дата начала 10 Фев 2023

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.

Rad89

10 Фев 2023 2 0

Друзья, доброго времени суток. Вот в начале недели познакомился с этой прекраснейшей темой «Arduino». Поизучал принцип строения программы, как подключать модули. Вроде бы осознаю за кодинг — как и откуда ноги да руки растут. Научился подключать простейшие датчики и вытаскивать в консоль их показания. В какой-то момент решил попробовать вывести значения датчика (да любого) на дисп LCD 1602 с чипом (уже паянный из коробки пришел). С подключением библиотеки LiquidCrystal и работой с ней проблем не возникло. Датчики исправно кажут свои значения на дисплее. Но когда решил попробовать вывести текст из консоли на дисплей — тут я застопорился. Объясните мне, пожалуйста, что сделано не так и почему в конце напечатанного мной текста вот эти 2 символа?

#include "Wire.h" #include "LiquidCrystal_I2C.h" // дисп LCD 1602 с допаянной платой. 4 контакта цепляем на Arduino Uno // +5V - VCC, GND - GND, A4 - SDA, A5 - SCL LiquidCrystal_I2C LCD(0x27,16,2); void setup() < Serial.begin(9600); LCD.init(); LCD.backlight(); delay(1000); LCD.setCursor (0,0); LCD.print("text is:"); LCD.setCursor (0,1); >void loop() < if (Serial.available()>0) < char txt = Serial.read(); Serial.write(txt); LCD.print(txt); delay(100); >; >

UPD: Я правильно понимаю, что эти символы — попытка программы напечатать или какие-то «остатки» или из-за петли Loop происходит сдвиг текста с его наложением?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *