Реклама ⓘ
Главная » Arduino
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Курс Arduino - Отображение данных на LCD

Куда вывести данные?

С помощью чего можно вывести показания разных датчиков? Что такое LCD дисплей и как с ним работать? Это мы и рассмотрим в этом уроке.

Сегодня нам понадобятся

  • LCD дисплей
  • Светодиодная шкала , 7-сегментный индикатор и Светодиод.
  • Потенциометр
  • Резисторы на 220 Ом
  • Соединительные провода  «Папа-Папа»

Светодиодная шкала

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

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

 

А теперь заставим наше устройство работать.

#define POT A0
#define FIRST 2 //Первый пин на шкале.
#define NUM 10 //Это количество пинов на шкале.

void setup() 
{
     //Чтобы не описывать каждый пин по отдельности, создадим цикл со счетчиком
     //Здесь пропишем общее количество пинов шкалы.
  for (int i = 0; i < NUM; ++i) 
     //Каждый из пинов шкалы обозначим как выход.
   pinMode(i + FIRST, OUTPUT);

}

void loop()
{
     //Определим уровень сигнала для включения светодиода
  int val = analogRead(POT) / 93; 
    //Создадим цикл для выведения значения на шкалу.
  for( int i = 0; i < NUM; ++i)
  {
    //Определим, какой светодиод зажигать.
    boolean Segment = (val > 0 + i);
    digitalWrite(i + FIRST, Segment);
  }
}

Пояснения

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

Boolean Segment  С помощью этой логической переменной мы определили условие, при котором включается следующий сегмент.

 LCD

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

 

Код

#include <LiquidCrystal.h> //Подключим библиотеку для дисплея.
//Покажем, к каким выводам мы подключили дисплей
LiquidCrystal lcd(13, 12, 11, 10, 9 ,8);  

#define POT A5
#define LED 7
void setup() 
{
  lcd.begin(16, 2); //Сообщаем кол-во строк и столбцов.
  lcd.print ("Command's name:"); //В первую строку выводим сообщение.
  pinMode(LED, OUTPUT);

}

void loop() {
  int val = analogRead(POT);
  val = map(val, 0, 1023, 0, 4);

  //Ставим курсор на 1 строку, колонку 0.
  //Это соответствует левому квадрату 2-й строки.
  lcd.setCursor(0, 1); 

  //Выводим сообщения параллельно с выполнением задач.
  if( val == 1)
  {
  //Если не поставить пробелы, последняя буква f при переключении потенциометра 
 // не будет стираться.
    lcd.print ("Led on   ");
    digitalWrite(LED, HIGH);
  }
  else if(val == 2)
  {
    lcd.print ("Led off");
    digitalWrite(LED, LOW);
  }
  else if(val ==3)
  {
    lcd.print ("Blink   ");
    for( int i = 0; i < 3; i++)
    {
      digitalWrite(LED, HIGH);
      delay(600);
      digitalWrite(LED, LOW);
      delay(600);
    }
  }
}

Пояснения

LiquidCrystal     О том, почему подключать LCD экран именно так, читай здесь.

Lcd.begin(x; y)   Эта функция сообщает LiquidCrystal, сколько строк(x) и столбцов(y) у нашего экрана.

Lcd.print   Эта функция печатает сообщение на экран.

Lcd.setCursor(x, y)  Эта функция ставит курсор на 1 строку в колонку 0.Это левый квадрат 2-й строки, т.к. нумерация начинается с нуля.

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

7-сегментный индикатор

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

Внимание на схему.

 

Код

#define FIRST  2
#define COUNT  7
#define POT A5
 
//Создадим массив в который пропишем кодировки выводимых чисел.
byte Segments[10] = 
{
  0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010,
  0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110,
};
 
void setup()
{
  for (int i = 0; i < COUNT; ++i)
    pinMode(i + FIRST, OUTPUT);
}
 
void loop()
{
  // определяем число, которое собираемся отображать. 
  int number = analogRead(POT) / 103;
  // получаем код, в котором зашифрована арабская цифра
  int value = Segments[number];
  // для каждого из 7 сегментов индикатора определяем: должен ли он быть включён.
  for (int i = 0; i < COUNT; ++i) 
  {
    // Для этого считываем бит (англ. read bit), соответствующий текущему
    // сегменту «i». Истина — он установлен (1), ложь — нет (0)
    boolean Segment = bitRead(value, i);
    // включаем/выключаем сегмент на основе полученного значения
    digitalWrite(i + FIRST, Segment);
  }
}

Пояснения

Byte – Тип данных byte позволяет сохранить до 1 байта данных. С помощью этого типа данных мы описывали цифры, выводимые на 7-сегментном индикаторе. Часть 0b говорит, что используется двоичная система счисления.

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

bitRead(номер бита, сегмент) - Функция позволяет считать нужный бит, чтобы определить, должен ли быть включен сегмент индикатора.

Вывод

На сегодня, пожалуй, хватит. Теперь мы умеем выводить данные на монитор и визуализировать показания на шкале и 7-сегментном индикаторе. 

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
Плата Arduino
Arduino Uno
1 Поиск в магазине ОтронВ блокнот
Светодиод
АЛ102Б
1 Поиск в магазине ОтронВ блокнот
Светодиодная сборка7-сегментный индикатор1 Поиск в магазине ОтронВ блокнот
Светодиодная сборкаСветодиодная шкала1 Поиск в магазине ОтронВ блокнот
LCD-дисплейMT-16S2H1 Поиск в магазине ОтронВ блокнот
Резистор
220 Ом
10 Поиск в магазине ОтронВ блокнот
Переменный резистор10кОм1 Поиск в магазине ОтронВ блокнот
Соединительные провода"Папа-Папа"1 Поиск в магазине ОтронВ блокнот
Макетная платаBreadboard-half1 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (2) | Я собрал (0) | Подписаться

0
igor679034 #
Схема на LCD не рабочая.
Ответить
0

[Автор]
Симилячник #
Эта схема подходит только для конкретного LCD, указанного в списке радиоэлементов. Вам следует поискать даташит на ваш LCD.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Модуль измерения тока на ACS712 (30А)
Модуль измерения тока на ACS712 (30А)
Набор для сборки - LED лампа Квадрокоптер Syma X11
вверх