Помогите разобраться с условиями срабатывания реле
- Войдите на сайт для отправки комментариев
Сб, 23/01/2016 - 14:21
Добрый день! Нужна помощь с условиями срабатывания реле от влажности и времеени суток. Скетч осущевствляет снятие показания с 2х датчиков DHT22, датчика BMP180, часов реального времени DS3231 и вывод на дисплей 5110. А также управляет реле увлажнителя в комнате при условии: влажность меньше 40% то включает реле пока влажность не дойдет до 50% и выключает его. Также установлен интервал времени срабатывания с 8 утра до 22 вечера.
Проблема в том что реле не отключается при достижении и привышении влажности 50%.
#include "stDHT.h" #include <Wire.h> #include <SPI.h> #include <Adafruit_BMP085.h> #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> #include <DS3231.h> DHT sens(DHT22); Adafruit_BMP085 bmp; Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3); DS3231 rtc(SDA, SCL); Time now; int rel = 11; const int button = 10; //кнопка переключения вывода показания термометра на 5110 int buttonState = 0; //кнопка переключения показания термометра void setup() { Serial.begin(9600); pinMode(8, INPUT);////инициализация датчиков dht22 digitalWrite(8, HIGH);//инициализация датчиков dht22 pinMode(9, INPUT);//инициализация датчиков dht22 digitalWrite(9, HIGH);//инициализация датчиков dht22 rtc.begin(); bmp.begin(); Wire.begin(); display.begin(); pinMode(button, INPUT); //кнопка переключения показания термометра pinMode(rel, OUTPUT); // реле увлажнителя } void loop() { buttonState = digitalRead(button); //кнопка переключения показания термометра на дисплее int th = sens.readTemperature(8); // чтение датчика на пине 2 дом int hh = sens.readHumidity(8); // чтение датчика на пине 2 дом int ts = sens.readTemperature(9); // чтение датчика на пине 3 улица int hs = sens.readHumidity(9); // чтение датчика на пине 3 улица int b = bmp.readPressure()/133.3; // барометр now = rtc.getTime(); //вывод на дисплей времени display.setTextSize(2); display.setTextColor(BLACK); display.setCursor(0, 0); if ( now.hour < 10) { display.print(" "); display.print(now.hour); } else { display.setCursor(0, 0); display.print(now.hour); } display.print(":"); if ( now.min < 10) { display.print("0"); display.print(now.min); } else { display.print(now.min); } display.print(" "); // вывод на дисплей давления display.setTextSize(1); display.setTextColor(BLACK); display.setCursor(0, 18); display.print("P="); display.setCursor(13, 18); display.print(b); display.print("mm"); //вывод на дисплей температуры в комнате display.setTextSize(2); display.setTextColor(BLACK); display.setCursor(0,30); if ( buttonState == HIGH) { display.print(ts); // вывод с уличного датчика } else { display.print(th); // вывод с комнатного датчика } display.setTextSize(1); display.setTextColor(BLACK); display.print("o"); display.setTextSize(2); display.setTextColor(BLACK); display.print("C"); display.display(); // вывод на дисплей влажности в комнате display.setTextSize(2); display.setCursor(53,30); if ( buttonState == HIGH) { display.print(hs); // вывод с уличного датчика } else { display.print(hh); // вывод с комнатного датчика } display.setTextSize(1); display.setTextColor(BLACK); display.print("%"); display.display(); delay(2000); display.clearDisplay(); // условия срабатывания реле if (hh < 40 && now.hour >= 8) { digitalWrite(rel,HIGH); } if (hh >= 50 && now.hour >= 22) { digitalWrite(rel,LOW); } }
строка 133 , по вашему условию оно выключится при влажности 50 и более, и времени после 22 включительно, думайте!
Valera19701 куда думать - то? Сперва условие выпонялось до того как влажность стала менне 40 и включилось реле.
может надо меньше 22 часов поставить, а?
А как тогда лучше задать условие чтобы в интервале с 8 утра до 22 вечера выполнялось условие включения при меньше 40 и не более 50?
задать глобальную переменную boolean sw=0:
Спасибо за помощь! Как раз пытался написать условие через оператор switch после того как ткнули носом!))))))
а еще лучше так, а то может не выключиться после 22 часов
задать глобальную переменную boolean sw=0:
Выключается, проверил. Спасибо!)