Как управлять насосом из трех мест с выдержкой времени?

ZaabaL
Offline
Зарегистрирован: 28.02.2018

Помогите уважаемые программисты! 

Необходимо включить насос через 3 минуты

после того как одна из трех кнопок нажата(удерживается,сухой контакт)

и отключить насос через 1 минуту

если ни одна кнопка не нажата.

P.S. для теплого пола. 3 минуты задержки нужны для открытия сервопривода на коллекторе и 1 минута на закрытие 

 

bwn
Offline
Зарегистрирован: 25.08.2014

Вы хотите написать или купить?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014
ZaabaL
Offline
Зарегистрирован: 28.02.2018

написать программу. 

Имеется Ардуино, реле... нужна программа

ZaabaL
Offline
Зарегистрирован: 28.02.2018

brokly, спасибо конечно. но мне надо на ардуино. 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Интересно, почему так всегда: кто-то делает себе теплый пол, фантазирует про ардуину, а отдуваются - программисты?

Вот ей-богу - не видел ни одного случая, когда автомастер бы на шару делал бы всякие улучшения автомобилю, на котором будет ездить посторонний человек. 

bwn
Offline
Зарегистрирован: 25.08.2014

ZaabaL пишет:

написать программу. 

Имеется Ардуино, реле... нужна программа

Еще раз уточняю - написать хотите сами или она просто нужна?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Ардуино это у Вас религия такая? Или это учебный проЭкт типа курсача ?

Делать надо на том, на чем проще и быстрее, по принципу минимальной достаточности. 

 
ZaabaL
Offline
Зарегистрирован: 28.02.2018

язык программирования не всем дается. я знаю как оно должно работать, а как написать не знаю. Пытался сам,но пойти дальше того,что просто при нажатии работает,а при отжатии не работает, не получилось... Как выставить задержки не разобрался.

ZaabaL
Offline
Зарегистрирован: 28.02.2018

не религия) скорее удобство и гибкость и малые размеры модулей. удобно установить в подрозетник или заказать корпус,или распечатать его на 3Д и получить полноценный модуль управления теплым полом. такие готовые модули стоят не прилично дорого.

ZaabaL
Offline
Зарегистрирован: 28.02.2018

хочу написать,но не получается

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
}
void loop()
{
  boolean Button1 = digitalRead(2);
  boolean Button2 = digitalRead(3);
  boolean Button3 = digitalRead(4);
  if(Button1 || Button2 || Button3)
  {
           digitalWrite(13, HIGH);
    }
    else
    {
      digitalWrite(13,LOW);
    }
  }
это все... с задержкой прям беда. непонимаю как ее вставить
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ZaabaL, не получается потому, что не с того начинаете.

А начинать нужно с описания алгоритма по-русски.

Представьте, что Вашу задачу предстоит выполнять не микроконтроллеру, а Вам лично. Пусть у Вас есть 3 индикатора, показывающие, что кнопки нажаты, и часы. Распишите подробно свои действия, чтобы выполнить указанную Вами задачу.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

В программировании важен не язык. А алгоритмическое мышление. с Методом конечных автоматов делается с тычка. Но вы уперлись не знаю язык, не знаю язык.

/*насос*/
unsigned long mill; // переменная под millis()
//-------насос---------------------
byte state = 0; /*0 выкл 1 вкл 2 собирается вкл 4 собирается выкл*/
void stand(byte s) { /*установить в состояние*/
}
void init() { /* инициализация воткнуть в setup*/
}
void run() { /*воткнуть в loop*/
}
void ONtime{ /*вкл с задержкой*/
}
void OFFtime{ /*выкл с задержкой*/
}


//--------------main--------------
void setup() {


}

void loop() {
  mill = millis();

}

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

Необходимо включить насос через 3 минуты

после того как одна из трех кнопок нажата(удерживается,сухой контакт)

и отключить насос через 1 минуту

если ни одна кнопка не нажата.

Как мне понялось:

Сетуп - инциализировать порты, сбросить флаг нажатия , выключить насос.

Лууп {

Если не выставлен флаг нажатия - опросить каждую из трех кнопок ( которые при нажатии меняют уровень сигнала на входе мк с ... на ...)

//что значит удерживается? 

После фиксации факта нажатия любой из трех кнопок зафиксировать значение миллис выставить флаг нажатия

// Ничего не делать пока миллис не увеличится на 180000

Если выставлен флаг нажатия и не включен насос {

Опросить миллис

при достижении миллис на 180000 больше зафиксированного включить насос и зафиксировать новое значение миллис}

//Ничего не делать пока миллис не увеличится на 60000

Если выставлен флаг нажатия и включен насос {

опросить миллис

При достижении миллис на 60000 больше зафиксированного выключить насос, сбросить флаг нажатия}

}

А Вы что имели ввиду ? Вопрос скорее к ТС

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

inspiritus. Я не понял кому вы задавали вопрос. Но хитрость решения(и работа с millis) это управлять не насосом а намериньем. Не включать насос, а делать так что бы насос сам захотел по времени вкл или по времени выключиться.  Поэтому я скетч оставил недописаным. Что бы ясен ход мысли решения. Пс: вот следующий этап.

/*насос*/
unsigned long mill; // переменная под millis()
/*кнопки*/
const byte Btn1Pin =/*пин*/2;
const byte Btn2Pin =/*пин*/3;
const byte Btn3Pin =/*пин*/4;
//-------насос---------------------
byte state = 0; /*0 выкл 1 вкл 2 собирается вкл 4 собирается выкл*/
void stand(byte s) { /*установить в состояние*/
}
void initPump() { /* инициализация воткнуть в setup*/
}
void runPump() { /*воткнуть в loop*/
}

void ONtime() { /*вкл с задержкой*/
}
void OFFtime() { /*выкл с задержкой*/
}


//--------------main--------------
void setup() {
  pinMode(Btn1Pin, INPUT_PULLUP);
  pinMode(Btn2Pin, INPUT_PULLUP);
  pinMode(Btn3Pin, INPUT_PULLUP);
  void initPump();
}

void loop() {
  mill = millis();
  bool Btn1 = digitalRead(Btn1Pin);
  bool Btn2 = digitalRead(Btn2Pin);
  bool Btn3 = digitalRead(Btn3Pin);
  if (!Btn1 || !Btn2 || !Btn3) { /*если одна из кнопок нажата*/
    ONtime();/*то вклюсить насос с задержкой 3 мин*/
  }
  if (Btn1 && Btn2 && Btn3) { /*если все кнопки отжаты */
    OFFtime();/*то отключить насос с задержкой 1 мин*/
  }
  void runPump() ;
}
/*Скетч использует 834 байт (2%) памяти устройства. Всего доступно 30720 байт.
  Глобальные переменные используют 13 байт (0%) динамической памяти, оставляя 2035 байт для локальных переменных. Максимум: 2048 байт.
*/

 

ПС: разумеется нажатая кнопка - это низкий уровень на кнопке

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

qwone пишет:

 Но хитрость решения(и работа с millis) это управлять не насосом а намериньем. Не включать насос, а делать так что бы насос сам захотел по времени вкл или по времени выключиться.  

Вот это ты популярно объяснил ! Даже проще твоих классов :) ТС теперь умом просветлеет :)

sadman41
Offline
Зарегистрирован: 19.10.2016

brokly пишет:

Вот это ты популярно объяснил ! Даже проще твоих классов :) ТС теперь умом просветлеет :)

Наверняка взял в библиотеке книгу про Вольфа Мессинга или про Калиостро фильм посмотрел...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Пух, ну вот ну почему, как я тебя прочитаю, мне хочется зарыдать и напица? 

ZaabaL
Offline
Зарегистрирован: 28.02.2018

qwone, огроменное тебе спасибо!!! супер программист)) Спасибо!!!

ZaabaL
Offline
Зарегистрирован: 28.02.2018

Всем большое спасибо! многим решили проблему управления коллекторами теплого пола на уровне!!! дело остается за малым, найти подходящий корпус и все подключить) 

inspiritus
Offline
Зарегистрирован: 17.12.2012

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

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