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;
}
// Отключить вывод звука
else
{
noTone (SPEAKER);
}
// Включить вентилятор и вывести значок на дисплей
digitalWrite(FAN, HIGH);
lcd.setCursor(15,1);
lcd.write(2);
}
- 221 -
//Не жарко!
else
{
// Выключить динамик
// Сбросить состояние one time в false
// Выключить вентилятор и значок на ЖК-дисплее
noTone(SPEAKER);
one time = false;
digitalWrite(FAN, LOW);
lcd.setCursor(15,1);
lcd.write(1);
}
}
Теперь, чтобы посмотреть температуру, необязательно подключать плату Arduino к компьютеру. Можно питать плату от батарейки или автономного источника питания и поместить ее в любом месте вашей комнаты.
ПРИМЕЧАНИЕ
Посмотреть видеоклип, демонстрирующий действие автономного терморегулятора, можно на странице http://www.exploringarduino.com/content/ch10. Этот видеофайл доступен также на сайте издательства Wiley.
10.6. Как усовершенствовать проект
Функциональные возможности описанной программы можно расширить. Вот несколько советов по улучшению проекта:
• Для увеличения мощности подключить вентилятор через транзистор.
• В зависимости от текущей температуры регулировать скорость вращения вентилятора с помощью широтно-импульсной модуляции.
• Добавить светодиоды для визуальной индикации предупреждений.
• Сделать звуковое оповещение в виде мелодии.
• Добавить фотодатчик и автоматически регулировать яркость подсветки дисплея в зависимости от освещенности в комнате, используя потенциометр SPI из главы 9.
Резюме
В этой главе вы узнали следующее:
• Как подключить ЖК-дисплей к плате Arduino по стандартной схеме.
• Как создавать собственные символы для ЖК-дисплея с помощью генерации произвольных растровых изображений.
• Как изменить функцию устранения дребезга кнопки для нескольких кнопок.
• Как объединить датчики, двигатели, кнопки и ЖК-дисплей в едином автономном устройстве.
Глава 11. Беспроводная связь с помощью радиомодулей ХВее
Список деталей
Для повторения примеров главы вам понадобятся следующие детали:
• 2 платы Arduino (рекомендуется Uno или Leonardo);
• USB-кабели для программирования плат Arduino;
• источники питания для каждой платы Arduino;
• адаптер SparkFun USB ХВее Explorer;
• 2 радиомодуля ХВее Series 1;
• 2 платы расширения ХВее shield;
• кнопка;
• пьезозуммер;
• RGB-светодиод с общим катодом;
• 1 резистор номиналом 10 кОм;
• потенциометр 10 кОм;
• 1 резистор номиналом 150 Ом;
• 3 резистора номиналом 220 Ом;
• набор перемычек;
• 2 макетные платы.
Электронные ресурсы к главе
На странице http://www.exploringarduino.com/content/ch11 можно загрузить программный код, видеоуроки и другие материалы для данной главы. Кроме того, листинги примеров можно скачать со страницы www.wiley.com/go/exploringarduino в разделе Downloads.
Что вы узнаете в этой главе
Настала пора отказаться от соединительных кабелей! При создании устройств на базе микроконтроллеров несложно реализовать беспроводную связь. Есть много
- 223 -
способов для организации беспроводной связи, для плат Arduino проще всего применить радиомодули ХВее, которые производит компания Digi. Модули ХВее работают как беспроводной последовательный порт, что позволяет для связи с ними использовать чтение и отправку последовательных данных, а это мы уже изучили.
Читать дальше