Есть ли ошибки в коде?
- Войдите на сайт для отправки комментариев
Ср, 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();
Понял спасибо...
24
int
h = digitalRead(5);
25
...
26
...
27
if
(dsens==1 && h>=dhtmax)
//если свет
Вы серьёзно считаете, что h хоть когда-нибудь может оказаться больше или равным 53? Условие в строке 27 не сработает НИКОГДА.
А почему?
Что почему? Условие не выполнится? Вам же kisoft уже писал и Вы сказали, что поняли.
h получает значение функции digitalRead. Что эта функция возвращает? Она может хоть при каких-нибудь условиях вернтуь нечто >= 53? Нет, не может. Значит h>=dhtmax всегда будет false, а значит и всё условие dsens==1 && h>=dhtmax тоже всегда будет false. т.е. строка 29 не выпполнится НИКОГДА.
Зато в другом месте
43
else
if
(h<=dhtminim)
//если влажность меньше 50%, то...
условие ВСЕГДА инстинно (по тем же причинам - потому, что h никогда не может быть ничем кроме 0 и 1, т.е. h всегда заедомо меньше 50). Значит строка 45
45
digitalWrite(relepin, LOW);
//выключаем реле.
будет выполняться ВСЕГДА.
А все доехало! Спасибо Вам огромное...