Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Задержка кода setTimeout (https://javascript.ru/forum/events/60165-zaderzhka-koda-settimeout.html)

allexmak 14.12.2015 20:40

Задержка кода setTimeout
 
Помогите сделать задержку на минуту проверки переменной polzunok1 если результат true, а если false то задержку не делать.
Думаю использовать timerId, но мне кажется есть проще способ.
polzunok1++ ?  vkl = true : vkl = false;
$("#vkl").text(vkl);
//если тру то нажимаем кнопку и отключаем другой
if(vkl == true) $("#009").click();
setTimeout(function(){$("#010").click();}, 1000);

krasovsky 15.12.2015 08:05

Цитата:

Сообщение от allexmak
polzunok1++ ?  vkl = true : vkl = false;

вот так это записывается
vkl = polzunok1++ ? true : false;
те не кажется условие polzunok1++ несколько странным, а?

Deff 15.12.2015 09:50

allexmak,
Опишите задачку целиком, к этому куску кода(если можно с эскизами-скриншотами)
Возможно будет интересней помочь, нежели абстрактный кусок ни уму не сердцу

allexmak 15.12.2015 17:46

Извините если коряво пишу:-? JS начал изучать месяц назад:)
Обьясню всю суть задумки:
Мне нужно, чтоб при изменении сопротивления, на пер. резисторе включался планшет, механика работает только нужно помочь со скриптом
Переменная polzunok1 подвязан к резистору получает его значения, для наладки скрипта подключил его к range
button подключены к включению подсветки планшета.

итог: при изменения переменной polzunok1, должна нажатся кнопка вкл потом выкл и не нажиматся больше пока горит подсветка на планшете (60000мс).

пока писал перелопатил половина скрипта))))
<!DOCTYPE HTML>
<html>
<meta charset="utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>
<body>
	<div class="btn-group">
	  <button type="button" class="btn btn-default botaoEnvia" id="009" id="999">Вкл</button>
	  <button type="button" class="btn btn-default botaoEnvia" id="010">Выкл</button>
	</div>

	<input type="range" min="0" max="100" step="1" value="50" id="polzunok1" oninput="znachenie1()">
	<br>
	itog1: <span id="itog1" >?</span>
	<br>
	Pcheck1:  <span id="Pcheck1" >?</span>
	<br>

<script>
var polzunok1;
var Pcheck1 == polzunok1;

function znachenie1() {
	polzunok1 = $("#polzunok1").val();
    $("#itog1").text(polzunok1);
};
//========================

function Pcheck(){

if (polzunok1 !== Pcheck1) {
	$("#009").click();//вкл
	setTimeout(function(){$("#010").click();}, 1000);// и выкл через сек

	Pcheck1 == polzunok1;
	};

$("#Pcheck1").text(Pcheck1);

// function slip(){};
// setTimeout(slip, 60000); //нужна задержка 60сек после изменения polzunok1
}
 setInterval(Pcheck, 400);
</script>
</body>
</html>

и вот тут пока проблема: Pcheck1 == polzunok1 непойму в чем.

Deff 15.12.2015 18:26

allexmak,
1. Откуда берётся переменная Pcheck1 ?
Из какого элемента брать это значение ?

2. Начальное положение - Выключено ?
3. Инициация включения - Передвижение Ползунка ?
Или наборот, если Включаем, то двигаем ползунок к значению Pcheck1 ?
=============
Пока отложил Вопрос про задержку и подсветку ...

allexmak 15.12.2015 20:40

1 Pcheck1 не берется внешни, она просто:
-принимает значение polzunok1
-сравнивает значение после изменения polzunok1
-после принимает его значение.
2 да начальное выключено.
3 да

Deff 15.12.2015 20:49

Цитата:

Сообщение от allexmak
Pcheck1 не берется внешни, она просто:
-принимает значение polzunok1 [1]
-сравнивает значение после изменения polzunok1
-после принимает его значение.

А зачем это нужно ?? Если было событие oninput - занчит Уже изменилось ,
Нафег сравнивать ?
Cмысл Переменной ?

Deff 15.12.2015 20:58

Цитата:

Сообщение от Deff
Опишите задачку целиком, к этому куску кода(если можно с эскизами-скриншотами)

(Можно электрическую схему идеи макета(или его куска), используемую для этой автоматизации) Ибо я пока недопонимаю логики скрипта и связи её с реальной автоматикой
==============================
Задержка на последующее включение не зависит от величины передвижки ползунка от текущего значения ?
Хоть на 1 подвинули от текущего, хоть на 50 ? - Всё одно 1минута ?

allexmak 15.12.2015 21:33

конечно было бы замечательно на счет диапазона передвига ползунка
2-3 единицы хотелось бы видеть в запасе и не включать, но об этом пока не думал главный момент для меня это не включать повторно если уже горит.
на счет схемы это немного сложновато потому что проект из многих датчиков и скриптов

могу нарисовать процесс обработки информации и связей
https://drive.google.com/open?id=0B8...nRhRHZJaTk3cDA

allexmak 15.12.2015 21:49

Цитата:

Сообщение от Deff (Сообщение 400091)
Cмысл Переменной ?

я думал сравнить её с фактическим значением чтобы прредпринять действия если изменения,
я же намерен в дальнейшем убрать ползунок

Deff 15.12.2015 21:53

allexmak,
Мне нужна схема взаимодействия, а не набросок комплектующих..
=================
Давай так:
1. Что делает резистор и чем он должен управлять, что должно шевелиться в системе при его подвижке ?
2. НАфига выключатель и что он включает - выключает ?
3. Для чего планшет и что он делает? Cейчас данным куском программы, кроме подсветки планшета, что либо задействано ?
4. Нафига планшету посдсветка, какую роль она играет для его работы ? Почему именно минута свечения ?

allexmak 15.12.2015 22:10

1 при подвижке тупо div с числами 0-100 и с этого id ,берем переменную
2 реле, как на схеме
3 планшет носитель HTML, нет
4 планшет отображает информацию с датчиков и все, загорается при верчениябарашка на настройке, минута, ну к примеру стоит через минуту потухание подсветки
5 но на мой взгляд это всё лишняя информация))

Deff 15.12.2015 22:47

allexmak,
Если ползунок в процессе движения (к примеру медленно движется)
1. Когда запускать вкл ? (Вариант - остановился и более секунды значение не меняется или Ваш Вариант действий ... ?
2. Стоит Блокировать возможность подвижки псевдоползунка(элемент <input type="range"...> ) на 60 сек при зажигании подсветки ?
=================================
Зажигание подсветки соответствует короткому вкл ? (c затем выкл) ?
Через сколько времени перекидывается на выкл. ? (после вкл.)

allexmak 15.12.2015 23:19

1 сразу включать как 1е изменение
2 блокировка ненужна
Цитата:

Зажигание подсветки соответствует короткому вкл ? (c затем выкл) ?
эта часть готова
$("#009").click();//вкл
setTimeout(function(){$("#010").click();}, 1000);// и выкл через сек

Deff 16.12.2015 00:03

allexmak,
Ну включилось, а если мы двигаем дальше ?
Что - так и будет включаться и выключаться ?
Даже если гнать ползунок быстро: займет - 2-3 секунды (реальный реостат - еще медленней)
Ну и чо - будет мигать несколько раз ? (минимум 2-3 раза)
Или как ?
====================
Для чего нужен реостат в реале ? Тогда я хоть логику пойму, ну пока идея автоматики либо мне непонятна, либо полный отстой...

allexmak 16.12.2015 20:12

1е изменение- включилось и больше ничего минута

как я уже писал реостат начинаешь дигать экран загорается и не нажимается кнопка пока экран сам не потухнет (в настройке планшета подсветка минута), как потух так опять проверяем крутится ли реостат, если да то опять включаем только один раз и не включаем минуту.

Deff 18.12.2015 01:53

См. Спойлер:
<!DOCTYPE HTML>
<html>
<meta charset="utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>
<body>
<style type="text/css">
#Lamp{
  border: rgba(56,185,53,.7) solid 2px;
  height: 123px;
  background: transparent url(http://s2.uploads.ru/t/BJc5O.jpg) center no-repeat;
}
#Lamp.set{
  border-color: rgba(255,0,0,.4) !important;
  background-image: url(http://s7.uploads.ru/t/yxOtG.jpg) !important;
}
.btn-group {
  position: relative;
}
/*Загородил кнопки от клика*/
.btn-group img {
  position: absolute;
  z-index: 1000;
  width: 100%;
  height: 100%;
}
</style>


	<br>
	<br>
        <table width=600>
	<tr><td id="Lamp"  colspan="2"><!--Типо Лампа--></td></tr>
        <tr><td>
	<br>
	<br>
	<input style="width:300px;" type="range" min="0" max="100" step="1" value="50" id="polzunok1" oninput="inputRezistor(this)">
	<br>
	<br>
Текущее значение R1 = <span id="itog1" >0</span>;</td><td>Значение Включения = <span id="Pcheck1" >??</span> ±<span id="trigDelta">1</span></td></tr>
        </table>
	<br>
	<br>
	<div class="btn-group">
          <img src="http://forum.mybb.ru/i/blank.gif" alt="Загораживалка кнопок от клика">
	  Вкл<input type="radio" name="on-off" class="btn btn-default botaoEnvia" id="009"/>
	  Выкл<input type="radio" name="on-off" class="btn btn-default botaoEnvia" id="010" checked/>
	</div>



<script>
 window.onload = function(){
 var T_подсветки = 10*1000;		//Пока 10 сек//Время задержки на время подсветки планшета
 var T_зaдержВкл = 1000;		//Задержка отключения Вкл.
 var Lamp = false;			//Подсветка включена/выключена;
 var trigDelta = 3;			//Дельта сработки от начального значения ползунка при выключенной подсветке [>0];
 var R1 = $('#polzunok1');		//Элемент ползунок;
 var itog = $("#itog1");		//Отображающий элемент текущего значения ползунка;
 var pcheck1 = false;			//Значение ползунка для подключения подсветки 
 var elPcheck1 = $('#Pcheck1');		//Отображающий элемент Значение ползунка для подключения подсветки;
 var elTrigDelta = $("#trigDelta");	//Отображающий элемент Дельта сработки;	
 elTrigDelta.text(trigDelta);

  setTimeout(function(){ //Дожидаемся autocomplete для id="polzunok1";

    function tstLampOnOff (x) {
      if(Lamp||pcheck1===false)return false;
      if(Math.abs(+x-pcheck1)<trigDelta)return false;

      //Зажигаем!
      Lamp = true; pcheck1 = false;
      $('#009').click(); $('#Lamp').addClass('set');
      setTimeout(function(){
           $('#010').click();
      },T_зaдержВкл);
      setTimeout(function(){
           Lamp = false;
           busy = false;
           $('#Lamp').removeClass('set');
           inputRezistor(R1[0])
      },T_подсветки);
    }

    var busy = false;
    function setStartLampZn (x) {  //Установка начального отсчёта включения [pcheck1]
      if(busy||Lamp) return false;
      busy = true;
      elPcheck1.text(x);
      pcheck1 = +x;
    }

    function setItog (x) {
      itog.text(x);
      setStartLampZn (x)
    }

    inputRezistor = function(el) {
      var x = el.value;
      setItog (x);
      tstLampOnOff(x);
    }
 
    inputRezistor(R1[0]);

  },1200);
};
</script>


</body>
</html>

allexmak 18.12.2015 11:38

Deff,
Класс это действительно то что нужно, спасибо огромное.

allexmak 18.12.2015 13:13

Deff,если не сложно, где поменять отсчет T_подсветки чтоб шло после последнего изменения pcheck1, а не первого.

Deff 18.12.2015 13:18

allexmak,
Не понял...
тут как: - подсветка планшета выключилась - pcheck1 зафиксировал текущий отсчет в inputRezistor
Далее tstLampOnOff (x) тестирует превышение разницы текущего pcheck1 над последущим изменением в inputRezistor на величину trigDelta
==============================
Вы ставите задачу непонятно - что есть "последнее изменения pcheck1" ?
Когда его считывать ?
==============================
Нарисуйте 3 графика друг под другом
1. - кривая изменение резистора от времени
2. Включение - выключения реле...
3. Время запуска подсветки
==============================
Cейчас эти графики примерно такие: http://s3.uploads.ru/t/tTHFM.jpg
Cиним - резистор
Красным - выключатель реле
Зелёным - подсветка

allexmak 18.12.2015 13:22

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

Deff 18.12.2015 13:38

allexmak,
Нарисуйте Графики - см предыдущее сообщение
Ну я занимаюсь автоматикой более 16 лет, мне сложно понимать не профессионала
=================
Подсветка Выключается что ли, при Срабатывании Вкл ?
Рисуйте графики от времени - (Для Включенного - Высокий уровень - выключено - низкий) Резистор - меняющийся по уровню

allexmak 18.12.2015 14:25

Вложений: 1
Deff,
я думаю так

allexmak 18.12.2015 14:30

Цитата:

Сообщение от allexmak (Сообщение 400199)
1е изменение- включилось и больше ничего минута

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

Deff 18.12.2015 14:45

allexmak,
Последнее изменение за какой промежуток времени ? Последнее изменение - это 100
Что будет если я иду вниз, от ста единиц - когда срабатывать 0 при нуле ?
Я могу в час двигать на одно деление...
======================
А если я буду увеличивать резистор плавно, 1 единичку в секунду ?
Кады срабатывать ? как дойдём до 100 ?
И вы так и не уточнили, нафига нужен резистор ???
Почему не выключатель ? Что символизирует этот резистор ?
======================

allexmak 18.12.2015 17:56

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

allexmak 18.12.2015 17:59

Цитата:

Сообщение от Deff (Сообщение 400425)
allexmak,
Последнее изменение за какой промежуток времени ?

тупо последнее изменение резистора (неважна величина)

allexmak 18.12.2015 18:06

Вложений: 1
график

allexmak 18.12.2015 18:10

Вложений: 1
либо лучше так

Deff 18.12.2015 18:20

allexmak,
У меня синее - график изменения ползунка сопротивления
Почему Вы его изображаете ступенькой ???
Ну плавное изменение у ползунка...
Пусть Ваш руководитель пояснит критерий срабатывания включения подстветки, в зависимости от ползунка. Ибо Вы очень трудно доносите желаемый алгоритм
В скриптах и в Автоматике - главное Алгоритм, - который суть задачи реализовать. Ну не понимаю я, почему форма кривой изменения сопротивления должна быть именно такая, и что она будет такая
=====================
Сейчас Алгоритм практически такой же как и на Вашем последней картинке! (Только кривая ползунка никак не связана с бросками, а плавно-произвольная, после включения подсветки (Зеленая линия в Высоком уровне и её фронт совпадает с красной)

Deff 18.12.2015 18:38

Снимите эти три графика от времени текущего Автомата:
Изменяйте медленно ползунок по единичке (сначало вправо) при запуске и позже, после сработки ВКЛ и после выключения лампы
1. Начальное значение устанавливается первое значение при начале работы или выключения подсветки
2. Выключатель реле и подсветка срабатывает при превышении уровня(в плюс или минус) триггера порога срабатывания trigDelta(сейчас он равен 3 единицы) от начального значения при начале работы или Выключения подсветки.
Продолжите график как дойдёте до максимума, в минимум....
================================================== ==
И неотвеченный вопрос: Что символизирует ползунок(или реостат в реальной установке, почему не просто выключатель ? Ведь В итоге мы делаем из ползунка выключатель по какому-то алгоритму, смысл таких извратов, если это не аналог чего-то ?) ибо мне тогда может быть будет понятно по аналогии, и возможность иных методов регулировки

allexmak 18.12.2015 19:12

синяя скочками потому что я имею ввиду показания резистора к примеру 30 потом крутанули на 50 потом 20 потом 80

allexmak 18.12.2015 19:22

Вложений: 1
возможно так понятнее

allexmak 18.12.2015 19:27

Вложений: 1
на верхний не смотри ошибся(

Deff 18.12.2015 19:33

allexmak,
я не понимаю критерия срабатывания в точке где ты добавляешь очередную минуту!
1. Что реально будет вместо ползунка ?
Какой то сигнал ?
Что за сигнал, откуда, какую информацию он несёт!
Пусть задачу поставит руководитель проекта ибо я не понимаю критериев срабатывания!
У меня срабатывает при превышении порогового уровня(выставляемого в trigDelta) от установочного значения после гашения подсветки, либо при самом начале работы

Сформулируйте условия срабатывания(продления) работы подсветки (от какого уровня, с какими пороговыми параметрами(или иными критериями) подсветка передозапускается)
Я не этого не понимаю! От чего отталкиваться и с чем сравнивать!

Попросите руководителя работы сформулировать этот алгоритм.

И всё так же не отвечен Вопрос!
Цитата:

Сообщение от Deff
И неотвеченный вопрос: Что символизирует ползунок(или реостат в реальной установке, почему не просто выключатель ? Ведь В итоге мы делаем из ползунка выключатель по какому-то алгоритму, смысл таких извратов, если это не аналог чего-то ?) ибо мне тогда может быть будет понятно по аналогии, и возможность иных методов регулировки

================================
Цитата:

синяя скочками потому что я имею ввиду показания резистора к примеру 30 потом крутанули на 50 потом 20 потом 80
Я не понимаю на пальцах! Ибо что будет если скачки будут не 30-50-80
a 20 21 22 15 ?
Где формула или алгоритм срабатывания ?
Текущий алгорит включения => Math.abs(+x-pcheck1)>=trigDelta

allexmak 18.12.2015 19:42

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

Deff 18.12.2015 19:47

allexmak,
Ну опять жа, почему резистор(или ползунок) - а не выключатель,
Что будет апосля вместо оного ?
Я думаю подсказка может таиться в этом

allexmak 18.12.2015 19:50

Цитата:

Сообщение от Deff (Сообщение 400469)
allexmak,
Ну опять жа, почему резистор(или ползунок) - а не выключатель,

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

Deff 18.12.2015 19:59

allexmak,
Оки,
Вопрос: насколько мелкие изменения температуры (движения реостата) влияют ?
1. К Примеру 1-2 единицы +/- будут приводить к досрабатыванию(сразу по окончании или в течении первой сработки) ?
2. Если термостат достаточно сильно крутиться на первом срабатывании, до минутной Выдержки(а потом к примеру тормозит чуть перед окончанием минуты до 1-2 единицы +/- - повторное срабатывать должно ? Или нужен большей размах амплитуды колебаний туды- сюды ?
3. Почему не поставить фотоэлемент на подсветку с планшета и брать окончание подсветки с него (поставить его на реле, и релём подавать сигнал на комп( к примеру тональный сигнал через аудиовход, есть и иные варианты )

allexmak 18.12.2015 20:10

1- я думаю 1-2 небудут приводить к досбрасыванию
2- этот момент думаю можно добавить: "перед окончанием минуты до 1-2 единицы+/- - повторное срабатывать должно ?"


Часовой пояс GMT +3, время: 15:26.