Официальный сайт компании Arduino по адресу arduino.cc
Помогите, не реагирует реле.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пнд, 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; // Реле выключено } } }
нет, это
42
if
(relay_state == RELAY_ON && lastUpdateTime + 5000)
// Если реле Вкл и прошло 5 секунд то
не так работает
36 37 38 не нужны
в 42 меняем lastUpdateTime + 5000 на (miillis()-lastUpdateTime >=5000)
Спасибо. Теперь реле включается если условие выполняется, но не выключается через 5 сек. Остается во вкл положении.
if из 42 надо вынести за пределы if из 22
Спасибо огромное! Все получилось.