Почему не работает код включения реле

Здравствуйте! Только начал разбираться с Arduino. Объясните пожалуйста, почему не отрабатывает этот код?

#include <microDS18B20.h>
 
#define termo_pin 2 //Пин термометра
#define rele_pin1 3 //Пин реле вытяжки

MicroDS18B20 <termo_pin> ds;

unsigned long termTimer;

unsigned long termo_time = 1000;
int termorele_on_temp = 27;
int termorele_off_temp = 25;
int termorele_state = HIGH;

void setup() {
  pinMode(rele_pin1, OUTPUT);

  digitalWrite(rele_pin1, termorele_state);
}

void loop() {
  ds.requestTemp();
  if(millis() - termTimer >= termo_time) {
    termTimer = millis();
    if(ds.readTemp() >= termorele_on_temp) {
      termorele_state = LOW;
    } else if (ds.readTemp() <= termorele_off_temp && digitalRead(rele_pin1) == LOW) {
      termorele_state = HIGH;
    }
    digitalWrite(rele_pin1, termorele_state);
  }
}

Суть следующая:
Мне необходимо, чтобы включалась вытяжка когда температура с термодатчика превышает 27 градусов, и отключалась, когда она упадет до 25.
Вроде все нормально прописано, однако по факту на пине реле просто постоянно есть напряжение и все.
Подскажите пожалуйста, что не так?

А вы значение, возвращаемое с термодатчика, пробовали в Сериал выводить?

если бы пробовал, было бы в коде, а так поди туда не знаю куда сделай то не знаю что

@Kazzi85 прочитайте, что Вам написал @b707, вытатуируйте это себе на лбу и всегда (от слова СОВСЕМ ВСЕГДА) при любой непонятке, печатайте и смотрите что же у Вас получается. ВСЕГДА!!! Нельзя вести машину закрытыми глазами!

Теперь по Вашему коду.

Вы выбрали одну из самых безграмотно написанных библиотек для этого датчика. Но это бы ещё ничего, если бы Вы хотя бы ею воспользовались грамотно. Но, смотрите, что Вы делаете:

  1. Вы насилуете свой датчик, дёргая за ds.requestTemp(); при каждом грёбанном проходе loop;
  2. раз в секунду, Вы насилуете его в особо извращённой форме, читай температуру через несколько несколько десятков наносекунд после того, как запросили.

Ну, как-то так.

1 лайк

Вот это прям сильно нужно?

&& digitalRead(rele_pin1) == LOW)

Ни чего полезного не сказано, тупо поток желчи. Спасибо)

В принципе нет. Думаю надо убрать. Спасибо)

Полезнее некуда. Если не понятно, перефразирую - не надо так часто читать данные с датчика. Достаточно раз в 5-15 секунд (к примеру).

Это ты от собственной некомпетентности. Все по делу, читай, учись, потом обращайся.

1 лайк

Дело в том, что нет у меня на руках самого устройства. Я пишу в слепую для одного друга, который хочет теплицу автоматизировать. Обратился ко мне, типа я прогер. А я Web-dev! :grin: Как дебажить эту хрень, я понятия не имею. Но сейчас понял, да))) Спасибо) Все поправил)

Я в научное сообщество что ли написал!!! Вы тут академики?! Нафига эти форумы, если новички тут вопросы задавать не могут?! У новичков не может быть умных вопросов!!! Угадай почему?! Потому, что они НОВЕЧКИ, умник!!!

Тема перемещена в песочницу.

Да, понял, спасибо.

Т. е ты ждешь, что тебе тут даташит на даллас переведут, по полкам разложут и в рот покладут?

1 лайк

Я жду, что подскажут в чем проблема. На любом форуме, блин, на ЛЮБОМ!!! всегда, когда спрашиваешь что-то, тебя сначала обольют дерьмом, потом расскажут, что ты имбицил, потом отправят учить матчасть, блин. А по сути просто надо подсказать, где может быть ошибка. Эти форумы для общения и помощи создаются, а не для обливания дерьмом новичков. Каждый, кто это делает, просто компенсирует то, что в жизни ему может навалять даже кролик. А тут он чуть ли не бог, потому будет сидеть тут, и поплевывать в тупых новичков дерьмом. Всегда бесили такие личности.

так вроде подсказал Евгений Петрович

  1. Ошибка раз - использование этой библиотеки
  2. Ошибка два, неправильное использование библиотеки
  3. Ошибка три, отсутствует код для отладки, отладка осуществляется выводом переменных в тех местах, где надо посмотреть принятие решения

на правду нельзя обижацца

1 лайк

Это я и так понял. Я пишу скетчи третий день. Я не знал, что библиотека плохая. Если есть лучше, хотя бы скиньте название и автора. Если я неправильно использовал библиотеку (я ее по роликам на ютубе учился использовать, если что), хотя бы подскажите, в чем ошибка. Я не прошу писать код за меня, просто подскажите. Да, я понял, что обращение к датчику каждую секунду - это плохо. Этот код тестовый. Я просто проверяю. Я сделаю секунд 20. НА счет отладки я понял. Просто можно было сказать, что в будущем, чтобы таких проблем не было и вопросов не появлялось, надо дебажить код используя вывод переменных. Я не могу этого сделать, к сожалению, так как устройства нет на руках. Но понял. Буду знать. Не надо грубить и обливать дерьмом. Надо просто и четко объяснять, в чем не прав человек. С этими знаниями не рождаются. Вы вот очень кратко изложили ошибки. Без полотна, в котором рассказывается, на сколько я туп и прочее. Я все понял. И благодарен вам.

Не писихуй.
Е.П тебя в твои ошибки ткнул носом. Тока ты нервничать стал, вместо подумать.
А еще раньше тебе стоило поинтересоваться, что это за приблуда такая 18В20, благо в сети на каждом углу про нее. И тогда б ты знал, что ей нужно подумать какое-то время, прежде чем данные выплюнуть.
А ты вместо думать сразу прыгать начал, как в том анекдоте про алкаша…

Ладно. Извиняюсь. Психонул.
Да, я знаю, что ей надо подумать. Я смотрел по ней пару роликов. Везде написано, что не меньше секунды. Вот я и оставил для теста секунду. Естественно такой интервал очень маленький, и надо увеличить. Смысла так часто опрашивать датчик нет.