Главная » Arduino
Призовой фонд
на ноябрь 2020 г.
1. 1500 руб
Сайт Паяльник
2. Мультиметр ANENG M118A
Сайт Паяльник
3. 525 руб.
От пользователей


Беспроводной модуль управления 433 МГц, мощностью 10 мВт

Курс 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

Arduino UNO
Arduino UNO
Pickit 2 - USB-программатор PIC-микроконтроллеров Квадрокоптер Syma X11
вверх