Читаем Изучаем Arduino: инструменты и методы технического волшебства полностью

Теперь добавим фрагмент кода для управления вентилятором и динамиком. Хотя ЖК-дисплей и так информирует нас обо всем, никогда не помешает дополнительное звуковое оповещение о событиях. Например, подача звукового сигнала перед включением вентилятора. В этом примере мы используем команды tone() в паре с задержкой delay() и notone(). Чтобы задать длительность звука, можно указать второй аргумент команды tone(). Добавив переменную состояния, можно устанавливать звуковое оповещение динамиком только один раз при превышении порогового значения температуры.

Фрагмент кода, приведенный в листинге 10.7, проверяет температуру и управляет динамиком, вентилятором и индикатором вентилятора на ЖК-дисплее.

Листинг 10.7. Выдача звукового оповещения при превышении пороговой температуры

// Стало жарко!

if (с>= set_temp)

// Издать звук динамиком

if ( !one_time)

{

tone(SPEAKER, 400);

delay(500);

one time = true;

}

- 217 -

// Выключить динамик

else

{

noTone (SPEAKER);

}

// Включить вентилятор и знак на ЖК-дисплее

digitalWrite(FAN, HIGH);

lcd.setCursor(15,1);

lcd.write(2);

}

// Стало прохладнее

else

{

// Выключить динамик

// Сбросить состояние one time в false

// Выключить вентилятор и значок на ЖК-дисплее

noTone(SPEAKER);

one time = false;

digitalWrite(FAN, LOW);

lcd.setCursor(15,1);

lcd.write(1);

}

Переменная one_time позволяет выдать однократный, а не непрерывный звуковой сигнал. После того как динамик издает звук длительностью 500 мс частотой 400 Гц, переменная устанавливается в true и сбрасывается в false только тогда, когда температура падает обратно ниже заданного порога.

10.5.5. Итог всего: полная программа

Теперь соберем части в единое целое. В начале программы необходимо подключить библиотеки, определить флажки и инициализировать переменные состояния.

Полный текст программы приведен в листинге 10.8. Загрузите ее на плату Arduino и сравните результаты с видеоклипом, демонстрирующим систему в действии.

Листинг 10.8. Программа автоматического регулятора температуры - LCD_thermostat.ino

// Это программа автоматического регулятора температуры

// Для вывода температуры используются 2 знака

// Использует библиотеку Wire с установкой адреса

#include

#define TEMP ADDR 72

// Подключение и инициализация библиотеки LiquidCrystal:

#include

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

- 218 -

// Пользовательский символ градуса

byte degree[8] = {

В00110,

В01001,

В01001,

В00110,

B00000, B00000, B00000, B00000,

};

// Пользовательский символ "вентилятор включен"

byte fan_on[8] = {

800100,

810101,

B01110,

B11111,

В01110,

B10101,

B00100,

B00000,

};

// Пользовательский символ "вентилятор выключен"

byte fan_off[8] = {

В00100,

B00100,

B00100,

B11111,

B00100,

B00100,

B00100,

B00000,

};

// Выводы подключения динамика, кнопок, вентилятора

const int SPEAKER=8;

const int DOWN_BUTTON =9;

const int UP_BUTTON =10;

const int FAN =11;

// Переменные для устранения дребезга кнопок

boolean lastDownTempButton = LOW;

boolean currentDownTempButton = LOW;

boolean lastUpTempButton = LOW;

boolean currentUpTempButton = LOW;

int set_temp = 23; // Значение граничной температуры

boolean one time = false; // Флаг звука динамика

- 219 -


void setup()

{

pinMode(FAN, OUTPUT);

// Создание объекта Wire (I2С-датчик температуры)

Wire.begin();

// Настройки дисплея (число столбцов и строк)

lcd.begin(16, 2);

// Определить пользовательские символы

lcd.createChar(0, degree);

lcd.createChar(1, fan_off);

lcd.createChar(2, fan_on);

// Вывод закрепленных сообщений на дисплее

lcd.setCursor(0,0);

lcd.print("Current:");

lcd.setCursor(10,0);

lcd. write ( (byte) 0);

lcd.setCursor(11,0);

lcd.print("C");

lcd.setCursor(0,1);

lcd.print("Set:");

lcd.setCursor(10,1);

lcd.write ( (byte) 0);

lcd.setCursor(11,1);

lcd.print("C");

lcd.setCursor(15,1);

lcd.write(1);

}

// Функция проверки на дребезг для нескольких кнопок

boolean debounce(boolean last, int pin)

{

boolean current = digitalRead(pin);

if (last != current)

{

delay(5);

current = digitalRead(pin);

}

return current;

}

void loop()

{

// Получить значение от датчика температуры

Wire.beginTransmission(TEMP_ADDR);

Wire.write (0);

Wire.endTransmission();

Wire.requestFrom(TEMP_ADDR, 1);

- 220 -

// Ожидаем передачу

// Получить 1 байт

while(Wire.available()==0);

int с = Wire.read();

// Установить курсор

// и вывести текущее значение

lcd.setCursor(8,0);

lcd.print(c);

// Проверка на дребезг для двух кнопок

currentDownTempButton = debounce(lastDownTempButton, DOWN_BUTTON);

currentUpTempButton = debounce(lastUpTempButton, UP_BUTTON);

// Уменьшить пороговое значение температуры

if (lastDownTempButton== LOW && currentDownTempButton == HIGH)

{

set_temp--;

}

// Увеличить пороговое значение температуры

else if (lastUpTempButton == LOW && currentUpTempButton

{

set_temp++;

}

// Вывод порогового значения на экран

lcd.setCursor(8,1);

lcd.print(set_temp);

currentDownTempButton;

lastDownTempButton

lastUpTempButton = currentUpTempButton;

// Очень жарко!

if (с >= set_temp)

{

// Однократный звуковой сигнал на динамик

if ( ! one_time)

{

tone(SPEAKER, 400);

delay ( 500);

one time = true;

}

Перейти на страницу:

Похожие книги

Самоучитель UML
Самоучитель UML

Самоучитель UMLПервое издание.В книге рассматриваются основы UML – унифицированного языка моделирования для описания, визуализации и документирования объектно-ориентированных систем и бизнес-процессов в ходе разработки программных приложений. Подробно описываются базовые понятия UML, необходимые для построения объектно-ориентированной модели системы с использованием графической нотации. Изложение сопровождается примерами разработки отдельных диаграмм, которые необходимы для представления информационной модели системы. Цель книги – помочь программистам освоить новую методологию разработки корпоративных программных приложений для последующего применения полученных знаний с использованием соответствующих CASE-инструментов.

Александр Васильевич Леоненков , Александр Леоненков

Зарубежная компьютерная, околокомпьютерная литература / Программирование / Прочая компьютерная литература / Книги по IT
Основы информатики: Учебник для вузов
Основы информатики: Учебник для вузов

Учебник состоит из двух разделов: теоретического и практического. В теоретической части учебника изложены основы современной информатики как комплексной научно-технической дисциплины, включающей изучение структуры и общих свойств информации и информационных процессов, общих принципов построения вычислительных устройств, рассмотрены вопросы организации и функционирования информационно-вычислительных сетей, компьютерной безопасности, представлены ключевые понятия алгоритмизации и программирования, баз данных и СУБД. Для контроля полученных теоретических знаний предлагаются вопросы для самопроверки и тесты. Практическая часть освещает алгоритмы основных действий при работе с текстовым процессором Microsoft Word, табличным редактором Microsoft Excel, программой для создания презентаций Microsoft Power Point, программами-архиваторами и антивирусными программами. В качестве закрепления пройденного практического курса в конце каждого раздела предлагается выполнить самостоятельную работу.

Вадим Васильевич Лысенко , Лариса Александровна Малинина , Максим Анатольевич Беляев

Зарубежная компьютерная, околокомпьютерная литература / Прочая компьютерная литература / Книги по IT
Внутреннее устройство Microsoft Windows (гл. 1-4)
Внутреннее устройство Microsoft Windows (гл. 1-4)

Книга посвящена внутреннему устройству и алгоритмам работы основных компонентов операционной системы Microsoft Windows — Windows Server 2003, Windows XP и Windows 2000 — и файловой системы NTFS. Детально рассмотрены системные механизмы: диспетчеризация ловушек и прерываний, DPC, APC, LPC, RPC, синхронизация, системные рабочие потоки, глобальные флаги и др. Также описываются все этапы загрузки операционной системы и завершения ее работы. B четвертом издании книги больше внимания уделяется глубокому анализу и устранению проблем, из-за которых происходит крах операционной системы или из-за которых ее не удается загрузить. Кроме того, рассматриваются детали реализации поддержки аппаратных платформ AMD x64 и Intel IA64. Книга состоит из 14 глав, словаря терминов и предметного указателя. Книга предназначена системным администраторам, разработчикам серьезных приложений и всем, кто хочет понять, как устроена операционная система Windows.Названия всех команд, диалоговых окон и других интерфейсных элементов операционной системы приведены как на английском языке, так и на русском.Версия Fb2 редакции — 1.5. Об ошибках просьба сообщать по адресу — general2008@ukr.net.

Дэвид Соломон , Марк Руссинович

Зарубежная компьютерная, околокомпьютерная литература / Прочая компьютерная литература / Книги по IT