Джереми Блум - Изучаем Arduino: инструметы и методы технического волшебства
- Название:Изучаем Arduino: инструметы и методы технического волшебства
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2015
- Город:Санкт-Петербург
- ISBN:978-5-9775-3585-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Джереми Блум - Изучаем Arduino: инструметы и методы технического волшебства краткое содержание
Для радиолюбителей
Изучаем Arduino: инструметы и методы технического волшебства - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Команда lcd.begin (16, 2) задает размер дисплея: 16 столбцов и 2 строки. Поскольку первая строка не меняется, ее можно инициализировать в функции setup() командой lcd.print(). Обратите внимание, что команда выполняется без предварительной установки курсора, потому что по умолчанию текст выводится, начиная с позиции (0,0). В цикле курсор всегда возвращается в позицию (0, 1 ), поэтому при выводе значения переменной time каждый раз переписывается вторая строка. Экран обновляется раз в секунду и одновременно увеличивается счетчик времени.
10.4. Создание специальных символов и анимации
Что делать, если вы хотите отобразить информацию, которую нельзя выразить с помощью обычных символов? Например, требуется вывести греческую букву, знак градуса или индикатор загрузки. К счастью, библиотека LiquidCrystal поддерживает создание пользовательских символов, которые могут быть отображены на дисплее. В следующем примере мы воспользуемся этой возможностью, чтобы реализовать движущийся значок, перемещающийся по экрану. А после этого создадим знак градуса для отображения измеряемой температуры.
Создавать пользовательские символы просто. Если внимательно посмотреть на ЖК-дисплей, то видно, что каждое знакоместо состоит из матрицы 5х8 пикселов.
Чтобы создать пользовательский символ, нужно определить значение каждой из этих точек и отправить соответствующую информацию на дисплей. Попробуем создать несколько символов, которые будут заполнять вторую строку дисплея анимированным прогресс-баром. Поскольку ширина каждого символа составляет 5 пикселов, для заполнения всей строки потребуются 5 пользовательских символов: первый с одним заполненным столбцом, второй с двумя столбцами и т. д.
В начале программы создаем для каждого символа массив байтов, в котором включенным пикселам будут соответствовать единицы, а выключенным - нули. Для первого символа (заполняющего 20% от ширины строки) массив выглядит следующим образом:
byte p20[8] = {
B10000,
- 209 -
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
};
Я назвал этот массив p2О, чтобы показать, что этот символ заполняет 20% пространства. В функции setup() вызываем библиотечную функцию createChar(), чтобы назначить данному массиву идентификатор ID пользовательского символа.
Пользовательские символы имеют ID от 0 до 7, вы можете в общей сложности сформировать восемь таких символов. Определим массив p20 как пользовательский символ с ID=0: lcd.createChar (0, p20);
Для отображения пользовательского символа на дисплее поместите курсор в нужное место и выполните команду lcd.write ( (byte) 0);
Добавьте остальные пользовательские символы и с помощью двух вложенных циклов в основном цикле программы loop() обновляйте прогресс-бар. Код данной программы приведен в листинге 10.2.
Листинг 10.2. Код прогресс-бара на экране дисплея - LCD_progress_bar.ino
// Прогресс-бар на ЖК-дисплее
// Подключение библиотеки LiquidCrystal
#include
// Инициализация экземпляра библиотеки LiquidCrystal
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
// Создание массивов для символов прогресс-бара
byte p20[8] = {
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
};
byte p40[8] = {
B11000,
B11000,
- 210 -
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
};
byte p60[8] = {
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
};
byte p80 [8] = {
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
};
byte p100[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
void setup()
{
// Настройка экземпляра дисплея - число столбцов и строк:
lcd.begin(16, 2);
// Вывод текста на ЖК-дисплей
lcd.print("Jeremy's Display");
// Определение пользовательских символов
lcd.createChar(0,p20);
- 211 -
lcd.createChar(1,p40);
lcd.createChar(2,p60);
lcd.createChar(3,p80);
lcd.createChar(4,p100);
}
void loop()
{
// Курсор в начало второй строки
lcd.setCursor(0,1);
// Очистка второй строки
// 16 пробелов
lcd.print(" ");
// Перебор каждого символа на второй строке
for (int i = 0; i<16; i++)
{
// Перебор каждого значения (p20 - p100)
for (int j=0; j<5; j++)
{
lcd.setCursor(i, 1);// Столбец установки курсора
lcd. write (j);// Вывод символа
delay(100);// Задержка
}
}
}
В начале каждого цикла во все 16 позиций второй строки выводится символ пробела ( строка очищается). Внешний цикл for() перебирает все 16 знакомест строки.
Во внутреннем цикле for() в каждое знакоместо с задержкой выводится увеличивающийся пользовательский символ прогресс-бара.
ПРИМЕЧАНИЕ
Для просмотра видеоклипа, демонстрирующего отображение прогресс-бара на ЖК-дисплее, посетите страницу http://www.exploringarduino.com/content/ch10. Этот видеоклип доступен также на сайте издательства Wiley.
10.5. Создание регулятора температуры
Давайте теперь заставим дисплей выполнять полезную функцию. Добавим I 2C датчик температуры, рассмотренный в главе 8, вентилятор и динамик из главы 5.
Дисплей будет показывать температуру и текущее состояние вентилятора. Когда станет жарко, динамик издаст предупреждающий звук и вентилятор включится.
Когда снова станет прохладно, вентилятор перестанет работать. С помощью двух кнопок и фрагмента кода подавления дребезга из листинга 2.5 вы получите возможность увеличивать или уменьшать требуемую температуру.
- 212 -
Соединение деталей для этого устройства представляет собой комбинацию предыдущих схем. Маломощный вентилятор с двигателем постоянного тока подключается непосредственно к контакту платы Arduino. При желании использовать мощный вентилятор, можно подключить его к внешнему источнику питания через транзистор ( см. главу 4). Для этого подойдет схема, изображенная на рис. 4.1. ЖК-дисплей подключим так же, как в предыдущем примере (см. рис. 10.2).
Один из выводов кнопок подключен к шине питания, а другой - к контакту Arduino и через резистор 10 кОм на землю.
Один вывод динамика подключен к контакту Arduino, а другой - через резистор 150 Ом к земле. Частота звука устанавливается программно.
I 2C-датчик температуры подключен так же, как в главе 8. Монтажная схема устройства изображена на рис. 10.3. Изображение датчика температуры сделано частично прозрачным, чтобы можно было увидеть потенциометр позади него.

Рис. 10.3. Схема регулятора температуры с ЖК-дисплеем
- 213 -
Для облегчения вывода информации на ЖК-дисплей заранее определим некоторые параметры. Решим, что температуру всегда будем отображать в виде двух цифр.
Надписи "Current:" и "Set:" всегда будут неизменными, их можно вывести на экран один раз. Так как температура представлена в виде двух цифр, местоположение двух надписей " 0 С" тоже будет фиксированным. Текущее значение температуры будет отображаться в позиции (8,0) и обновляться при каждом цикле loop(), значение пороговой температуры размещено в позиции (8, 1) и обновляется при нажатии кнопки. Значок включения вентилятора будет отображаться в нижней правой части дисплея в позиции (15,1) и обновляться, когда изменяется состояние.
Читать дальшеИнтервал:
Закладка: