Управление реле с задержкой по времени
- Войдите на сайт для отправки комментариев
Втр, 22/09/2020 - 12:49
Ддоброго времени всем. Помогите разобраться как управлять 3-мя реле с задержкой по времени включения от установленной температуры. Чтобы цикл показаний на дисплей не переставал выводить текущее показание температуры. В программировании новичек и прошу не пинать а подсказать по существу как и что делаю не правильно.
#include <U8glib.h> // подключение библиотеки для дисплея U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI // инициализация дисплея #include <OneWire.h> // подключение датчика #include <DallasTemperature.h> // подключение библиотеки для преобразования температуры #define relay_pin1 = 6 ; // реле подключенный к пину 6 #define relay_pin2 = 7 ; // реле подключенный к пину 7 #define relay_pin3 = 8 ; // реле подключенный к пину 7 #define ONE_WIRE_BUS 5 // пин 5 к которому подключен датчик OneWire oneWire(ONE_WIRE_BUS); // настройка объекта oneWire для связи с любым устройством OneWire DallasTemperature sensors(&oneWire);// передать ссылку на oneWire библиотеке DallasTemperature void draw(void) { // настрока дисплея u8g.setFont(u8g_font_gdr30); u8g.setPrintPos(20, 31); u8g.print(sensors.getTempCByIndex(0)); } void setup(void){ sensors.begin(); // запустить библиотеку Serial.begin(9600); pinMode(relay_pin1, OUTPUT); // устанавливает режим работы - выход pinMode(relay_pin2, OUTPUT); // устанавливает режим работы - выход pinMode(relay_pin3, OUTPUT); // устанавливает режим работы - выход digitalWrite(relay_pin1, LOW); // устанавливаем в выключенное положение digitalWrite(relay_pin2, LOW); // устанавливаем в выключенное положение digitalWrite(relay_pin3, LOW); // устанавливаем в выключенное положение } void loop(void){ sensors.requestTemperatures(); // отправить команду для получения температуры Serial.println(sensors.getTempCByIndex(0)); // напечатать температуру в градусах Цельсия u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); while((sensors.getTempCByIndex(0) <= 30)){ // условие, температура меньше 30 сделать... delay(15000); // задержка времени по включению digitalWrite(relay_pin1, HIGH); //включить реле digitalWrite(relay_pin2, HIGH); //включить реле digitalWrite(relay_pin3, HIGH); //включить реле break; // вернуться в цикл } // while((sensors.getTempCByIndex(0) >= 30)){ // digitalWrite(ledPin, LOW); // } // if((sensors.getTempCByIndex(0) <= 30)) // условие, если температуру меньше указанного значения то... // digitalWrite(ledPin, HIGH); // строка деййствия условия if((sensors.getTempCByIndex(0) >= 31)) // условие, если температуру меньше указанного значения то... digitalWrite(ledPin, LOW); // строка деййствия условия delay(500); }
Избавица надо от delay();
Избавица надо от delay();
Хорошо. Проблема еще в том что нужно первых два реле включить через 15 сек, а третье через 30 сек. не понимаю как это сделать. Подохреваю что через переменную?
Ого! спасибо. я то думал все проще через while это делается. Типо условие выполнения и задержка по времени
Попробуйте так
Попробуйте так
Да, спасибо огромное! все работает как надо! И как я сам не додумался насчет паузы? искал же задержки в кодах. Где можно об этом почитать?
Спасибо еще раз!!!!
И как я сам не додумался насчет паузы?
тебя это удивляет? :)
Товарищи, подскажите как добавить энкодер, для полчения возможности изменения числа включения кол-ва реле и времени включения, установки температуры?
Дописать в код ещё три раза по столько же строк, сколько в нем сейчас.
Товарищи, подскажите как добавить энкодер, для полчения возможности изменения числа включения кол-ва реле и времени включения, установки температуры?
Легко! Изучить энкодер или использовать готовые подпрограммы под него.
а более дельные советы? примеры?
Ты думаешь я так на абум пишу? я наверное пробую сам сначала, потом уже спрашиваю тех кто понимает в этом.
Ну, и что Вы там напробовали сначала?
Я пробовал как на видео АлексГайвер делает, но мне не совсем нравится использование его библиотеки. И как бы изменить шрифт когда входишь в меню редактирования.
Как обойтись без библиотеки мне пока не понятно
Вы когда научитесь сами библиотеки писать - тогда будете пробовать без них. А пока не умеете - делайте с библиотеками
Энкодер - это всего только 3 кнопки.
3 прерывания ... и всё.
Какие, в шопу, библиотеки? Нахера?
У некоторых атмег - энкодер является штатной функцией.
ну если можешь, понимаешь, подсказывай.