Есть ли ошибки в коде?
- Войдите на сайт для отправки комментариев
Ср, 30/09/2015 - 06:55
#include "DHT.h" // Подключение библиотеки датчика влажности и температуры
#define DHTPIN 5 // Cигнальный выход датчика подключен к 6 пину
// выбор используемого датчика
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE); //инициализация датчика DHT
int sens = 2;//устанавливаем датчик света на 2 пин...
int relepin = 6; //Определяем для вентилятора пин 6...
int dhtmax=53;
int dhtminim=50;
unsigned long currentTime;//переменные для времени
unsigned long loopTime;
//Блок настроек, выполняется однократно
void setup()
{ // Начало инициализации блока
Serial.begin(9600);
currentTime = millis(); // считываем время
loopTime = currentTime;
pinMode(sens, INPUT);//устанавливаем значение нашего датчика света, как вход
pinMode(relepin, OUTPUT);//устанавливаем значение нашего датчика вентиляции, как выход // Запускаем ход чаов
}
// Основной блок программы, выполняется бесконечно, циклично
void loop() { // Начало инициализации блока
int h = digitalRead(5);
int dsens = digitalRead(sens); //переменная для считывания показаний с датчика света
Serial.print(h);
if (dsens==1 && h>=dhtmax)//если свет выключен, то проверяем состояние датчика влажности и если оно превышает 53%
{
digitalWrite(relepin, HIGH); //включаем вентилятор
}
if (dsens==0 && h>=dhtmax)//если включили свет и влажность по прежнему > 53%, то...
{
currentTime = millis(); // считываем время
if(currentTime >= (loopTime + 60000*3) && dsens==0)//ставим условие: если через 3 мин свет включен то...
{
digitalWrite(relepin, LOW);//выключаем реле.
}
else if (currentTime < (loopTime + 60000*3) && dsens==1)//в противном случае если свет выключили раньше 3 мин то...
{
digitalWrite(relepin, HIGH);//включить реле
}
}
else if (h<=dhtminim)//если влажность меньше 50%, то...
{
digitalWrite(relepin, LOW);//выключаем реле.
}
}
У меня проблема не срабатывают реле!
digitalRead возвращает HIGH или LOW, а Вы его с чем сравнивает?
Вы влажность не измеряете.
В сетапе должно стоять DHT.begin();
Измерение: Влажность = DHT.readHumidity();
Понял спасибо...
24inth = digitalRead(5);25...26...27if(dsens==1 && h>=dhtmax)//если светВы серьёзно считаете, что h хоть когда-нибудь может оказаться больше или равным 53? Условие в строке 27 не сработает НИКОГДА.
А почему?
Что почему? Условие не выполнится? Вам же kisoft уже писал и Вы сказали, что поняли.
h получает значение функции digitalRead. Что эта функция возвращает? Она может хоть при каких-нибудь условиях вернтуь нечто >= 53? Нет, не может. Значит h>=dhtmax всегда будет false, а значит и всё условие dsens==1 && h>=dhtmax тоже всегда будет false. т.е. строка 29 не выпполнится НИКОГДА.
Зато в другом месте
43
elseif(h<=dhtminim)//если влажность меньше 50%, то...условие ВСЕГДА инстинно (по тем же причинам - потому, что h никогда не может быть ничем кроме 0 и 1, т.е. h всегда заедомо меньше 50). Значит строка 45
45digitalWrite(relepin, LOW);//выключаем реле.будет выполняться ВСЕГДА.
А все доехало! Спасибо Вам огромное...