aleksjet
Я подключил с поправками CiberRus так:
Вот работающий у меня скетч:
#include <DHT.h> // Подключаем библиотеку для работы с датчиком
#include <DS1307.h> // Подключаем библиотеку управления модулем реального времени
#include <LiquidCrystalExt.h> // Подключаем библиотеку управления экраном
#include <LineDriver.h> // Далее вспомогательные библиотеки для реализации интерфейса SPI
#include <SPI.h>
#include <SPI_Bus.h>
#include <Wire.h>
//#include <LiquidCrystal.h> // Подключаем стандартную библиотеку управления экраном
#define DHTPIN 9 // Считывающий пин с датчика
#define DHTTYPE DHT22 // Модель датчика
#define tPIN 7 // Пин управления температурой
#define hPIN 6 // Пин управления влажностью
#define lPIN 5 // Пин управления светом
#define sdPIN 3 // Пин управления светодиодной лентой
DHT dht(DHTPIN, DHTTYPE); // Создаем объект dht
int tStatus = HIGH; // определяем переменную, отвечающую за состоянеие нагревателя HIGH=выкл, LOW=вкл
int tempDay = 28; // Желаемая дневная температура в градусах Цельсия
int tempNight = 25; // Желаемая ночная температура в градусах Цельсия
int hStatus = HIGH; // определяем переменную, отвечающую за состоянеие увлажнителя HIGH=выкл, LOW=вкл
int humDay = 45; // Желаемая дневная влажность
int humNight = 40; // Желаемая ночная влажность
SPI_Bus shreg(_8bit, 10); // Подключаем сдвиговый регистр
LiquidCrystal lcd(1, 2, 3, 4, 5, 6, &shreg, 7); // Инициализируем дисплей
//LiquidCrystal lcd(12, 11, 10, 9, 4, 2); // Инициализируем дисплей
void setup() // инициализация основных данных
{
Serial.begin(9600); // Инициализируем COM-порт
dht.begin(); // Инициализируем датчик
pinMode(tPIN, OUTPUT); // Определяем пин для управления температурой как Вывод
pinMode(hPIN, OUTPUT);
pinMode(lPIN, OUTPUT);
lcd.begin(16,2); // устанавливаем размеры экрана
//lcd.backlight(true); // Указываем использование подсветки экрана
}
void loop() // зацикливание (код управляющей программы)
{
if (Serial.available() > 0) SetTime(); // Если на COM-порт поступила информация, то изменим системное время
float h = dht.readHumidity(); // Считываем влажность
float t = dht.readTemperature(); // Считываем температуру
int Hour = RTC.get(DS1307_HR,true); // Получаем значение текущего часа
int Minute = RTC.get(DS1307_MIN,false);
int Second = RTC.get(DS1307_SEC,false);
boolean Day = (Hour >= 8 & Hour <20); // Если текущий час находится в промежутке от 8 до 20, то действуют дневные параметры
tStatus = (t < ((Day) ? tempDay : tempNight)) ? LOW:HIGH; // Если температура меньше желаемой, то статус обогревателя=Вкл, в противном случае Выкл
//Relay.lineWrite(tPIN, tStatus);
digitalWrite(tPIN, tStatus);
if (h < ((Day) ? humDay : humNight)) hStatus = LOW; else hStatus = HIGH; // Если влажность меньше желаемой, то статус увлажнителя=Вкл, в противном случае Выкл
digitalWrite(hPIN, hStatus);
digitalWrite(lPIN, (Day) ? LOW:HIGH); // Если дневное время, то включим подсветку
switch(Hour) // в зависимости от времени меняем яркость светодиодной ленты
{
case 7:analogWrite(sdPIN, map(Minute, 0, 59, 0, 255)); break;
case 20:analogWrite(sdPIN, map(Minute, 0, 59, 255, 0)); break;
default:analogWrite(sdPIN, (Day) ? 255:0);
}
lcd.setCursor(1,0); // устанавливаем позицию курсора на экране (на один символ правее левого верхнего угла)
lcd.print(t, 1); lcd.print("C "); lcd.print(h, 1); lcd.print("% "); // Выводим информацию о климате
lcd.setCursor(4,1); // устанавливаем курсор для вывода времени
lcd.print(addZero(Hour));lcd.print(":");lcd.print(addZero(Minute));lcd.print(":");lcd.println(addZero(Second)+ " "); // Выводим время
lcd.setCursor(1,1);lcd.print((tStatus == LOW) ? "+":" "); // Выводим индикатор работы подогрева
lcd.setCursor(13,1);lcd.print((hStatus == LOW) ? "+":" "); // Выводим индикатор работы увлажнения
delay(500); // Задержка в пол секунды
}
void SetTime() // установка времени из шаблона tчч:мм
{
if (Serial.read() == 't'
// Если первый символ t, то установим указанное время
{
int h = (Serial.read() - '0'
* 10 + (Serial.read() - '0'
;
Serial.read();
int m = (Serial.read() - '0'
* 10 + (Serial.read() - '0'
;
RTC.stop();
RTC.set(DS1307_SEC,0); //set the seconds
RTC.set(DS1307_MIN,m); //set the minutes
RTC.set(DS1307_HR,h); //set the hours
RTC.start();
}
Serial.flush();
}
String addZero(int val)
{
if (val<10) return "0" + String(val);else return String(val);
}
Этот скетч выложил CiberRus , я только изменил вход датчика с 8-го пина на 9-й т.к. у меня на Ардуинке 8-й оказался не рабочим.
И временно закоментировал подсветку,займусь ей позже.
Кстати там видно какие подключаются библиотеки.
Где их брать - CiberRus дал ссылки.
Все делал сразу в версии IDE 0.23