Помогите, не реагирует реле.
- Войдите на сайт для отправки комментариев
Пнд, 01/06/2020 - 08:52
Помогите разобраться. Не могу найти ошибку. Цель - контроль температуры в термошкафу. Если температура меньше 120 градусов включаем реле и нагреваем шкаф 5 сек, затем выключаем реле. Если больше 120 - реле остается выключенным.
Проблема заключается в том, что реле не переключается в состояние вкл если температура меньше 120.
Ниже скетч.
#include <OneWire.h>
OneWire ds(8); // Объект OneWire
int temperature = 0; // Глобальная переменная для хранения значение температуры с датчика DS18B20
long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика
const int TEMP_UPDATE_TIME = 60000; // Определяем периодичность проверок
#define PIN_RELAY 7
#define RELAY_ON 1
#define RELAY_OFF 0
char relay_state = RELAY_OFF;
void setup() {
Serial.begin(9600);
pinMode(PIN_RELAY, OUTPUT); //Объявляем пин реле как выход
digitalWrite(PIN_RELAY, HIGH); //Выключаем реле - посылаем высокий сигнал
}
void loop() {
byte data[2];
ds.reset();
ds.write(0xCC);
ds.write(0x44);
if (millis() - lastUpdateTime > TEMP_UPDATE_TIME)
{
lastUpdateTime = millis();
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read();
data[1] = ds.read();
// Формируем значение
temperature = (data[1] << 8) + data[0];
temperature = temperature >> 4;
if (temperature < 120) { // Если темп меньше 120 то
digitalWrite(PIN_RELAY, LOW); //Вкл реле
relay_state = RELAY_ON; // Присваиваем переменной состояния - реле включено
} else { //Если больше 120 то
digitalWrite(PIN_RELAY, HIGH); //Выключаем реле
relay_state = RELAY_OFF;//Присваиваем переменной состояния - реле выключено
}
Serial.println(temperature); // Выводим полученное значение температуры
// Т.к. переменная temperature имеет тип int, дробная часть будет просто отбрасываться
if (relay_state == RELAY_ON && lastUpdateTime + 5000) // Если реле Вкл и прошло 5 секунд то
{
digitalWrite(PIN_RELAY, HIGH); // Выключаем реле
relay_state = RELAY_OFF; // Реле выключено
}
}
}
нет, это
42if(relay_state == RELAY_ON && lastUpdateTime + 5000)// Если реле Вкл и прошло 5 секунд тоне так работает
36 37 38 не нужны
в 42 меняем lastUpdateTime + 5000 на (miillis()-lastUpdateTime >=5000)
Спасибо. Теперь реле включается если условие выполняется, но не выключается через 5 сек. Остается во вкл положении.
if из 42 надо вынести за пределы if из 22
Спасибо огромное! Все получилось.