Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование микроконтроллера Arduino в информационно-управляющих системах. Учебное пособие
.pdf
Вариант 1: Повторите эксперимент из примера к данной лабораторной
работе.
Вариант 2: Схема с потенциометром. Пьезо-динамик издает ноты первой
октавы по порядку, с паузой в половину секунды между нотами. Поворот ручки
потенциометра уменьшает или увеличивает громкость звука.
Вариант 3: Запрограммируйте плату Arduino на проигрывание любой
простейшей мелодии. Вы можете сочинить мелодию сами. Используйте таблицу 18
для подбора частот нот.
5.9 Лабораторная работа №9 «Работа с текстовым экраном 16х2»
Цель работы: научиться использовать LCD дисплей для вывода текста.
Научиться работать с библиотекой «LiquidCrystal».
5.9.1 Краткие теоретические сведения
Существует большое количество разновидностей текстовых экранов,
которые так же называют LCD экранами или дисплеями. Для работы с такими
экранами существует стандартнаяArduino-библиотека «LiquidCrystal». Набор
«Матрешка Z» укомплектован LCD дисплеем «MT-16S2H» российской компании
«Мэлт», так же имеющим функцию подсветки, как представлено на рисунке 41.
81

Рисунок 41– LCD дисплей MT-16S2H на макетной плате
Перед подключением дисплея следует отключить питание от платы Arduino.
Ниже приведено описание всех контактов дисплея по порядку:
1. Первый – GND.
2. Второй – 5V (питание).
3. Третий – контрастность. Произвольное напряжение от 0В до 5В изменяет
контрастность изображения. Чем оно выше, тем тусклее будет картинка. Для
возможности регулировки контрастности можно использовать потенциометр. Для
получение максимально контрастного изображения следует соединить третий
контакт с пиномGND платы Arduino.
4. Четвертый контакт дисплея - линия адресного сигнала, известная как
«RS». В зависимости от того, подается на нее ток или нет, дисплей понимает, есть
ли на линии данных команда «передвинуть курсор» или код символа для
отображения.
5. Пятый контакт – отвечает за выбор режима чтения или записи в LCD
дисплей. В подавляющем большинстве случаев нет никакой необходимости
82

считывать уже выведенную информацию с дисплея. Поэтому, пятый пин дисплея
следует соединять с пиномGNDArduino, тем самым выставляя экран в режим
«всегда записывать».
6. Шестой контакт - это линия разрешения доступа к данным, известная
«Enable» (или просто «Е»). Когда эта на эту линию подается ток, дисплей исполняет
команду или выводит символ с линии данных.
7. 11, 12, 13, 14 контакты дисплея — это линии данных, известные как
«DB4», «DB5», «DB6», «DB7».
8. Другие контакты не используются в рамках лабораторных работ данного
пособия.
Для работы с экраном используется библиотека «LiquidCrystal», которую
необходимо подключить в самом начале программы:
#include<LiquidCrystal.h>
Следом за подключением библиотеки необходимо указать, к каким
пинамArduino подключены соответствующие контакты LCD дисплея:
LiquidCrystallcd(#4, #6, #11, #12, #13, #14);
где #4, #6, #11, #12, #13 и #14 – номера контактов LCD дисплея, т.е. на месте
этих цифр следует указать соответствующие пиныArduino, к которым были
подключены указанные #контакты дисплея, при чем именно в таком порядке.
Синтаксис этой функции следующий:
LiquidCrystallcd(RS, E, DB4, DB5, DB6, DB7);
Т.е. для подключения дисплея в режиме вывода символов достаточно
подключить два управляющих контакта (RS и E) и 4 контакта линии передачи
данных (DB4, DB5, DB6, DB7).Для повышения скорости обновления данных
(перерисовки текста на экране) можно также подключить контакты DB1, DB2 и
DB3. Режим считывания данных с экрана потребует подключения третьего
управляющего контакта.
Далее следует установить размер ячеек для вывода символов вашей модели
LCD дисплея. Для MT-16S2H это 16х2 (на что так же указывает название самой
модели: 16S - 16 символов, 2H - 2 строки):
83

lcd.begin(16, 2); //16 столбцов, 2 строки
Для вывода информации на экран используется функция «print»:
lcd.print("OSAU");
Чтобы начать печатать с другого знакоместа, следует установить в него
курсор с помощью соответствующей функции:
lcd.setCursor(0, 1); /* Данная команда установит курсор в начало 2 строки
дисплея. Так как отсчет идет с нуля, вторая строка имеет номер 1, а не 2. Тоже
касается и знакоместа – первая ячейка для символа имеет номер 0. */
На экран LCD дисплея можно также выводить кириллицу. Однако нельзя
просто написать «lcd.print(“Привет!”)». Это связанно с несовместимостью
кодировок. Для написания русских букв необходимо с помощью
последовательности «\x##» вставить в функцию код символа из таблицы символов
юникода (utf-8). Код (или серию кодов, стоящих друг за другом) следует
оборачивать в отдельные кавычки. Например, вот так можно написать слово
«Привет»:
lcd.print("\xA8""p""\xB8\xB3""e""\xBF");
Разберем по порядку:
1. Сначала выводится буква «П»: "\xA8" .
2. Затем выводится латинская буква «p», соответствующая русской букве «р»:
"p" .
3. Затем выводятся буквы «и» и «в». Так как коды следуют друг за другом, их
можно расположить внутри общих кавычек: "\xB8\xB3" .
4. Следом выводится латинская буква «е», соответствующая русской букве
«е»: "e" . Ее следует расположить в отдельных кавычках, иначе компилятор может
прочитать "\xB8\xB3E", а не "\xB8\xB3" "e" и написать вместо буквы «в» совершенно
другой символ.
5. Последней буквой является «т»: "\xBF" .
В данном случае используются буквы «е» и «р», которые совпадают по
написанию в латинице и в кириллице. Поэтому, как и для некоторых других букв,
84

таких как «а», «о», «у», «х» и «с», можно использовать их «латинский аналог», а не
код символа utf-8.
5.9.2 Пример
LCD дисплей соединен с платой ArduinoUNO, пример представлен на
рисунке 42. Соответствие контактов (контакт дисплея – контакт Arduino):
1. (GND) – пинGND.
2. (Питание) – пин 5V.
3. (Контрастность) – пинGND.
4. (Управляющий контакт RS) – пин 4.
5. (Режим чтения/записи) – пинGND.
6. (Управляющий контакт Enable) – пин 5.
11. (Линия передачи данных DB4) – пин 10.
12. (Линия передачи данных DB5) – пин 11.
13. (Линия передачи данных DB6) – пин 12 .
14. (Линия передачи данных DB7) – пин 13.
Рисунок 42 – Схема подключения LCD дисплея к плате Arduino
Кодскетча:
85

#include <LiquidCrystal.h>
LiquidCrystallcd(4, 5, 10, 11, 12, 13);
void setup()
{
lcd.begin(16, 2);
lcd.print("Hello OSAU!");
lcd.setCursor(0, 1);
lcd.print(":)");
}
voidloop()
{
}
Результат работы скетча: на LCD дисплей выводится сообщение
«HelloOSAU! :)»
5.9.3 Практическое задание
Соберите электрическую схему с LCD дисплеем и напишите скетч для
Arduino.
Вариант 1: Выведите большое сообщение (занимающее обе строки) на
кириллице, включающее в себя специальные символы из таблицы UTF-8 (например,
#, &, *).
Вариант 2: Напишите два сообщения, сменяющих друг друга каждые 5
секунд. Используйте любой текст, кириллицу или латиницу на ваш выбор.
Вариант 3 (задание повышенной сложности): Реализуйте бегущую строку.
Используйте любое сообщение. Для упрощения работы, используйте только одну
(верхнюю или нижнюю) строчку LCD.
86

5.10 Лабораторная работа №10 Первый проект. Игра «Кто быстрее»
Цель работы: научиться обеспечивать взаимодействие между различными
электронными компонентами; создать простейшее устройство, включающее в себя
комплекс взаимодействующих элементов.
5.10.1 Краткие теоретические сведения
В данной лабораторной работе предлагается создание игры «Кто быстрее».
Игра рассчитана на двух игроков. Суть игры в том, чтобы нажать кнопку сразу
после звукового сигнала быстрее, чем противник. Принцип работы простейшего
варианта устройства:
1. Старт игры. Подсвечивание светодиода – индикатора таймера.
2. Ожидание случайного промежутка времени от 5 до 15 секунд.
3. Звуковой сигнал. Отключение светодиода – индикатора таймера.
4. Считывание нажатия кнопки.
5. Звуковой сигнал.
6. Определение победителя и подсвечивание соответствующего
светодиода.
7. Ожидание перезапуска игры (уход в бесконечный цикл while(1);).
На рисунке 43 вы можете увидеть игру в сборе. В практическом задании
будут предложены к выполнению более сложные реализации устройства.
87

Рисунок 43 – Собранное устройство, игра «Кто быстрее»
5.10.2 Пример
В качестве минимального комплекта для двух игроков, вам понадобятся две
тактовых кнопки, три светодиода разных цветов, пьезо-динамик, соответствующие
резисторы, макетная плата и соединительные провода. На рисунке 44 изображен
пример схемы подключения. При составлении схемы элементы располагались так,
чтобы было наглядно видно, что к чему подключено. При выполнении работы
постарайтесь разместить элементы и соединительные провода максимально
компактно. Используйте гибкий зажим или стяжки для объединения проводов в
группу.
88

Рисунок 44 – Вариант схемы подключения устройства
Код скетча:
int D = 9;
int DL = 12;
int P1 = 10 ;
int P2 = 11;
int K1 = 4;
int K2 = 5;
void setup()
{
pinMode(D, OUTPUT);
pinMode(DL, OUTPUT);
pinMode(P1, OUTPUT);
89

pinMode(P2, OUTPUT);
pinMode(K1, INPUT);
pinMode(K2, INPUT);
}
void loop()
{
digitalWrite(DL, HIGH);
delay(random(3000, 15000));
tone(D, 3000, 350);
digitalWrite(DL, LOW);
while(true){
if (digitalRead(K1)) {
digitalWrite(P1, HIGH);
tone(D, 4000, 1000);
delay(1500);
digitalWrite(P1, LOW);
while(true);
}else{
if (digitalRead(K2)){
digitalWrite(P2, HIGH);
tone(D, 4000, 1000);
delay(1500);
digitalWrite(P2, LOW);
while(true);
}
}
}
}
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
