Всем привет.
Проблемка такая. нужно включать вытяжку по двум условиям.
- принудительно кнопкой по времени у меня это 10 минут.
- По датчику влажности порог 60 %.
Так вот в чем проблема отдельно по 1 пункту и отдельно по 2, работает как часы. Но мне нужно что бы два условия работали вместе,
но получается что по первому условию, работает а по второму нет. Тут я понимаю то что в 1 и 2 условиях есть да или нет и дно условие блокирует другое.
как это победить?
#include <SPI.h>
#include "Adafruit_GFX.h" // подключаем графическую библиотеку
#include <Adafruit_ST7789.h>
#include <Arduino_ST7789_Fast.h>
#include "OneWire.h"
#include "DallasTemperature.h"
#include <SparkFun_Qwiic_Humidity_AHT20.h>
AHT20 humiditySensor;
#define CS 10
#define DC 8
#define RST 9
#define MISO 12 // Пин подключения вывода дисплея SDO(MISO)
#define MOSI 11 // Пин подключения вывода дисплея SDI(MOSI)
#define CLK 13 // Пин подключения вывода дисплея SCK
Adafruit_ST7789 tft = Adafruit_ST7789(CS, DC, RST);
#define button A1 // кнопка включения вентилятора
#define fan A3 // Выход на вытяжку
int maxHum = 60; // максимальная влажность
int time_fan=6000; //60000 миллисекунд=600 секунд= 10 минут включение вытяжки от кнопки
OneWire oneWire(2); // порт подключения датчика 18b20
DallasTemperature ds(&oneWire);
DallasTemperature sensors(&oneWire); // Передача ссылки на нашу библиотеку oneWire библиотеке датчика температуры Dallas Temperature
int flag=0;
unsigned long time;
void setup() {
time=millis();
pinMode(button, INPUT); // Порт Кнопки как вход
digitalWrite(button, HIGH); // Порт кнопки высокий уровень
pinMode(fan, OUTPUT); //Выход на вытяжку
ds.begin(); // инициализация датчика ds18b20
Serial.begin(9600);
Wire.begin(); // инициализации шины I2C
if (humiditySensor.begin() == false){ // инициализация и проверка подключения
Serial.println("AHT20 not detected"); // если датчик не обнаружен, вводим программу в бесконечный цикл
while (1);
}
tft.cp437(true); // Необходимо чтоб все буквы выводились корректно
tft.init(240, 320); // разрешение экрана
tft.invertDisplay(false); //инверсия цветов
tft.setRotation(3); //< Переворачиваем дисплей.Возможны два варианта 1 и 3
tft.fillScreen(ST77XX_BLACK);
tft.cp437(true); // Необходимо чтоб все буквы выводились корректно
}
void loop() {
if(digitalRead(button)==LOW&&flag==0) // Кнопка включения вытяжки
{ flag=1;
time=millis(); }
if(digitalRead(button)==HIGH&&flag==1&&((millis()-time)>time_fan)) {
flag=0; }
digitalWrite(fan,flag);
ds.requestTemperatures();
// если от датчика получены свежие данные, выводим их
if (humiditySensor.available() == true)
{
float temperature = humiditySensor.getTemperature(); // получаем температуру
float humidity = humiditySensor.getHumidity(); // получаем относительную влажность
tft.setTextColor(WHITE,BLACK);
tft.setTextSize(2);
tft.setCursor(40, 1);
tft.print(utf8rus("Темп."));
tft.setCursor(112, 1);
tft.print(temperature, 1);
tft.setTextColor(CYAN,BLACK);
tft.setTextSize(2);
tft.setCursor(40, 20);
tft.print(utf8rus("Влаж."));
tft.setCursor(112, 20);
tft.print(humidity, 1); // Выводим влажность
tft.setCursor(170, 20);
tft.setTextColor(RED,BLACK);
tft.print(utf8rus("Уст."));
tft.setCursor(225, 20);
tft.print(maxHum);
tft.setTextColor(YELLOW,BLACK);
tft.setTextSize(2);
tft.setCursor(40, 40);
tft.print(utf8rus("Темп."));
tft.setCursor(112, 40);
tft.print(ds.getTempCByIndex ( 0),1); // выводим температуру
if(humidity > maxHum ) { // Если превысилась влаж.
digitalWrite(fan, HIGH ); //ТО включаем высокий уровень на выводе №3
} else {
digitalWrite(fan, LOW); //если не превысилась то низкий уровень
}
}
}
