Включение чего либо тактовой кнопкой на определенное время
- Войдите на сайт для отправки комментариев
Сб, 08/10/2016 - 22:10
В моем случае нужно по нажатии на кнопку включать поподогрев стеклоочистителей на время допустим 20 мин или выключать, если до этого он был включен и еще не успел выключиться сам. Будет ли правильно работать такой скетч?
#include <class_BUTTON.h> // вел Клапауция #define RELAY 12 // выход на реле включения подогрева подогрева стеклоочистителей #define LED 11 // выход на индикацию кнопки включения подогрева BUTTON button (10); // вход кнопки включения подогрева unsigned long time, timer=0; bool timerenabled=false; #define TIMEREXPIRED (time-timer)>1200000 // таймер на 20 мин bool dvornik = 0; // состояние подогрева void setup() { pinMode (LED, OUTPUT); digitalWrite(LED, LOW); // сначала индикация выключена pinMode (RELAY, OUTPUT); digitalWrite(RELAY, HIGH); // сначала реле в положении выкл, сигнал инвертирован } void ON() // цикл запуска таймера включения подогрева { timer=time; timerenabled=true; dvornik = 1; } void loop() { digitalWrite (LED, dvornik); digitalWrite (RELAY, !dvornik); button.read(); time = millis(); if (timerenabled) { if (TIMEREXPIRED) {timerenabled=false; dvornik = 0;} } else { if (button.click_down && !dvornik) ON(); if (button.click_down && dvornik) {dvornik = 0; timerenabled=false;} } }
Будет ли правильно работать такой скетч?
Нет. Не будет. Правильная работа скетча в принципе не реализуема, можно только достичь состояния, когда ошибки не будут существенно влиять на возможность использования по основному назначению.
ПС. А залить и проверить не? Аналитически никто не проверит правильность реализации, только можна явные ляпы найти.
я наивный надеялся на то, что опытные люди проверят мой скетч, и укажут на серьезные ошибки, если таковые есть, которые я исправлю до того как всё соберу (а то сегодня уже поздно ковырятся), чтобы был эффект: ОО чудо, всё заработало с первого раза!
я наивный надеялся на то, что опытные люди проверят мой скетч, и укажут на серьезные ошибки, если таковые есть, которые я исправлю до того как всё соберу (а то сегодня уже поздно ковырятся), чтобы был эффект: ОО чудо, всё заработало с первого раза!
прекрасно - теперь объясни, зачем ты столько всего нагородил?
В моем случае нужно по нажатии на кнопку включать поподогрев стеклоочистителей на время допустим 20 мин или выключать, если до этого он был включен и еще не успел выключиться сам.
На мой взгляд, логика управления несколько ущербная. По уму, надо не по времени делать, а с обратной связью:
1. Разместить температурные датчики на стекле в местах парковки стеклоочистителей.
2. Включать подогрев стеклоочистителей только при отрицательной температуре в местах парковки.
Соответственно:
1. При плюсовой температуре подогрев не нужен и он не включится
2. Когда сами стеклоочистители выключены, они быстро нагреют место парковки и подогрев будет работать незначительно.
3. При включении стеклоочистителей место их парковки будет охлаждаться тем сильнее, чем меньше времени стеклоочистители находятся в запаркованном состоянии, а значит и подогрев сможем регулировать, в зависимости от режима работы стеклоочистителей.
P.S. Термодатчики следует прикрыть от штатного обдува стекл, например, аллюминиевым скотчем. Чтобы мерять температуру стекла, а не воздуха из обдува )
P.P.S. В зависимости от конструкции, не исключаю, что потребуется еще датчик внешней температуры воздуха. На случай продуманного оборева лобового стекла, когда оно ниже нуля все равно не охлаждается.
согласен, но я стеклоочистители в подарок купил. Там можно было прикупить один из комплектов управления - с брелка, с кнопки через простое реле, и по датчикам температуры. Но все эти приколы не укладывались в мой бюджет (ну кроме обычного реле конечно). Поэтому , т.к. валяется без дела дуня, решил побыстрому (ДР уже скоро, могу не успеть) сделать через реле и кнопку, но с выключением по таймеру. Датчики температуры можно потом добавить, но поставлю их непосредственно в щётки. Там имхо лучше.
прекрасно - теперь объясни, зачем ты столько всего нагородил?
08
static
const
byte
bounce_ = 50;
// длительность отслеживания дребезга.
09
static
const
byte
doubleclick_ = 200;
// длительность отслеживания двойного клика.
10
static
const
unsigned
long
timer_ = 5000;
// длительность отслеживания неактивности.
11
static
const
unsigned
int
retention_ = 2000;
// длительность отслеживания нажатия и удержания.
Правильно ли я понимаю, что в классе в строке 10 необходимо поставить нужное мне время 1 200 000 мсек вместо 5000?
PS недооценил возможности велосипеда
10
static
const
unsigned
long
timer_ = 5000;
// длительность отслеживания неактивности.
Правильно ли я понимаю, что в классе в строке 10 необходимо поставить нужное мне время 1 200 000 мсек вместо 5000?
да. все константы можно изменять.
проверил скетч из сообщения #3- работает, спасибо за оптимизацию кода!
проверил скетч из сообщения #3- работает, спасибо за оптимизацию кода!
удалению кода, дублирующего функции и переменные класса
описалово класса здесь #255
Датчики температуры можно потом добавить, но поставлю их непосредственно в щётки. Там имхо лучше.
Безусловно лучше. Просто это конструктивно сложнее и не всегда возможно. Места для кабеля на поводках мало, чтобы тем же льдом этот кабель потом не оборвать.