Работа с таймером
- Войдите на сайт для отправки комментариев
Вс, 29/01/2017 - 15:41
Здравствуйте.
не пойму как сделать включение вентилятора на определенное время после выключения света в туалете, а именно как привязаться к millis()
Освоил такой таймер он срабатывает один раз в в какойто период времени (в данном случае раз в 2 секунды)
if (millis() - timerDHT > 2000 ) // раз в 2 секунды считываем показания датчика DHT11
{
Temperatura1 = dht.readTemperature(); // Получаем данный о температуре
Vlajnost1 = dht.readHumidity(); // Получаем данный о влажности
timerDHT = millis(); // Сбрасываем таймер для нового отсчета
}
код управления вентилятором и светом в туалете (при выключеном свете ВСЕ время работает вентилятор)
// Управление реле света в туалете
if (digitalRead(SensBOTTON2Pin) == LOW) // если сенсорный выключатель включен
{
digitalWrite(ReleLIGHT2Pin, HIGH); // включаем реле управляющее светом
}
else // если сенсорный выключатель выключен
{
digitalWrite(ReleLIGHT2Pin, LOW); // выключаем реле управляющее светом
}
// Управление реле вентилятора в туалете
if (digitalRead(ReleLIGHT2Pin) == LOW) // если выключаем реле управляющее светом
{
digitalWrite(ReleFUN2Pin, HIGH); // включаем реле управляющее вентилятором
}
else
{
digitalWrite(ReleFUN2Pin, LOW); // выключаем реле управляющее вентилятором
}
может на if...else это сделать нереально? и надо использовать другие операторы управления.
может както отслеживать изменение состояния сенсорной кнопки? пробовал такое условие:
if (digitalRead(ReleLIGHT2Pin) == !digitalRead(ReleLIGHT2Pin) && digitalRead(ReleLIGHT2Pin) == LOW)
{
digitalWrite(ReleFUN2Pin, HIGH); // включаем реле управляющее вентилятором
timerFUN2 = millis(); // запускаем таймер во время выключения реле света
}
if (if (digitalRead(ReleLIGHT2Pin) == LOW && millis() - timerFUN2 > 30000)
{
digitalWrite(ReleFUN2Pin, LOW); // выключаем реле управляющее вентилятором после 30 секунд работы
}
но тоже не хочет правильно реагировать.
может на if...else это сделать нереально? и надо использовать другие операторы управления.
Какие бы Вы предложили?
Решил свою задачу так:
назначил переменную текушего состояния реле света перед условием
в самом конце цикла назначил переменную текушего состояния реле света
в первом условии сравниваю, что они не должны быть равны и состояние реле управления света - выключено
внутри код включаю реле вентилятора
и сбрасываю таймер для начала осчтета.
во втором условии слежу за временем если оно превысит заданное
выключаю реле управленияя вентилятором
// Управление реле вентилятора в туалете boolean ReleLIGHT2 = digitalRead(ReleLIGHT2Pin); // Считываем текущее состояние реле управления светом if (Previous_ReleLIGHT2 != ReleLIGHT2 && digitalRead(ReleLIGHT2Pin) == LOW) // если происходит изменение состояния реле управляющее светом и оно выключено { digitalWrite(ReleFUN2Pin, HIGH); // включаем реле управляющее вентилятором timerFUN2 = millis(); // сбрасываем таймер } if (millis() - timerFUN2 > 5000) // как только таймер отсчитал 5 секунд { digitalWrite(ReleFUN2Pin, LOW); // выключаем реле управляющее вентилятором } // Запоминаем состояния Previous_ReleLIGHT2 = digitalRead(ReleLIGHT2Pin); // Запоминаем в каком состоянии было реле управления светом в предыдущем цикле loop