On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение



ссылка на сообщение  Отправлено: 24.08.16 16:32. Заголовок: Слайдер и задержка


Добрый день,

Получаю аналоговое значение со слайдера, в Simpl + преобразую это все в нужный формат строки и кидаю по TCP.
Только не хочется обрабатывать каждый шаг изменения слайдера.
В идеале задержку на обработку значения. То есть пользователь хоть пол часа будет дергать слайдер, но только как он его отпустит и пройдет пауза 1 секунда без изменения значения, то последнее значение обрабатывается и кидаетсяв сеть.
Пробовал Delay вставить в процедуру
CHANGE Value_Input
{
Delay(200);
Serial_Out = ITOA(Value_Input) + "\x0D\x0A";
}
Но он с задержкой все равно все изменения мне обрабатывает. А как можно прервать ожидание Delay(200) и запустить его заново, пока идет изменение Value_Input?

Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 12 [только новые]


постоянный участник




ссылка на сообщение  Отправлено: 24.08.16 16:46. Заголовок: Зачем так? Нужно отп..


Зачем так?
Нужно отправлять значение когда юзер палец от экрана оторвал или изменения остановились на 0.2-0.3 сек.
Для регулирования громкости такой способ вообще неприемлем.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 24.08.16 17:14. Заголовок: Это не громкость. Уп..


Это не громкость. Управление шторами Lutron.
Получилось с пальцем от экрана.
Только у Shade Controller есть такая особенность. Если нажать на Shade Controller и пальцем потянуть вверх или вниз, выходя за границы слайдера, то значение слайдера изменится, а когда палец отпускаешь за пределами слайдера, то Join остается высоким до тех пор пока я вновь не нажму на слайдер.
Итог: значение слайдера изменилось а штора не поехала(

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 24.08.16 17:15. Заголовок: Игорь K. а каким обр..


Игорь K. а каким образом отследить что изменения остановились на 0.2-0.3 сек?

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 24.08.16 20:37. Заголовок: RuckShot1 пишет: А ..


RuckShot1 пишет:

 цитата:
А как можно прервать ожидание Delay(200) и запустить его заново, пока идет изменение Value_Input?


Используйте wait:
CHANGE Value_Input
{
CancelAllWait (); //любое новое измнение рестартует wait, закрывая запущенный ранее не выполняя его тело и запускает новый
wait(20) //отправка при отсутствии изменений по истечении 0.2с
{
Serial_Out = ITOA(Value_Input) + "\x0D\x0A";
}
}

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 24.08.16 21:03. Заголовок: Вячеслав пишет: Can..


Игорь K. пишет:

 цитата:
Зачем так?
Нужно отправлять значение когда юзер палец от экрана оторвал или изменения остановились на 0.2-0.3 сек.


Например для [Color Piker] который разом шлёт 3 аналога, только вот приходят они (иногда) с микро запазданием.
Или для управления 3 слайдерами R & G & B, чтоб слалось конечное значение со всех 3 например с задержкой 5 сек. а не по отпусканию каждого. При этом фидбыки можно вывести без задержки в Color Chip для наглядности выбора перед тем как пошлётся. Если не охота кнопку [Применить] для ручного отправления после выбора цвета.


Вячеслав пишет:

 цитата:
CancelAllWait ();


Сбросит все таймеры что не есть гуд

Мой вариант... пришол к нему... когда вынес себе мозг с 3мя (CHANGE RED,GREEN,BLUE) значениями RGB в один DTP232 (0xFFFFFF) для KNX

THREADSAFE - по желанию ...

integer SendDelay = 200;
THREADSAFE CHANGE INPUT;
{

TRACE ("Бл.... опять поменялось");

Wait(SendDelay,SendingDelayTimer){ // SendDelay - вермя ожидания, SendingDelayTimer - таймер (имя "ответственного держателя") при каждом CHANGE сбрасывается на SendDelay
TRACE ("Ну да ладно... Шлём");
OUTPUT=INPUT;

}
}

P.S. Для нескольких входов:
integer SendDelay2 = 100;
integer OuptutSum;
THREADSAFE CHANGE INPUT1, INPUT2;
{

TRACE ("Бл.... опять поменялось");

OuptutSum=INPUT1+INPUT2; //считается при всех изменениях

Wait(SendDelay2,SendingDelayTimer2){ // SendDelay2 - вермя ожидания 2, SendingDelayTimer2 - таймер 2 (имя "ответственного держателя") при каждом CHANGE сбрасывается на SendDelay2
TRACE ("Ну да ладно... Шлём");
OUTPUT_SUM=OuptutSum; // отошлётся только конечный результат.

}
}


Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 24.08.16 21:13. Заголовок: Никакие таймеры не с..


Никакие таймеры не сбрасываются. Я такого не писал. Перезапускается (отменяется его отложенное выполнение) Wait с тем же таймером 0.2с

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 24.08.16 21:19. Заголовок: Вячеслав пишет: Ник..


Вячеслав пишет:

 цитата:
Никакие таймеры не сбрасываются. Я такого не писал. Перезапускается (отменяется его отложенное выполнение) Wait с тем же таймером 0.2с



Я такое написал ;)

Представьте что у вас два:

1) CHANGE Value_Input
2) другой таймер (для фиг поймёш чего) в этом же модуле

что сделает CancelAllWait (); со вторым? оно нам надо?

P.S.
PUSH KillWait1

{
TRACE ("Хотя нет... фигушки первому");
Cancelwait(SendingDelayTimer);

}

PUSH KillWait2

{
TRACE ("Хотя нет... фигушки и второму");
Cancelwait(SendingDelayTimer2);

}



Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 24.08.16 22:26. Заголовок: Джентльмены, вы всер..


Джентльмены, вы всерьез собираетесь решать эту задачу средствами Simpl+ ?

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 24.08.16 22:28. Заголовок: про 2 wait-а никто н..


про 2 wait-а никто не говорил )
Если в модуле используется более одного wait, то используем персональный идентификатор NAME=Lutron и выносим wait в функцию (иначе не скомпилим модуль)
Function SEND_VALUE()
{
wait(20,Lutron) //отправка при отсутствии изменений по истечении 0.2с
{
Serial_Out = ITOA(Value_Input) + "\x0D\x0A";
}
}
CHANGE Value_Input
{
CancelWait (Lutron); //любое новое изменение рестартует wait c именемLutron, закрывая запущенный ранее не выполняя его тело и запускает новый
SEND_VALUE();
}

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 24.08.16 22:31. Заголовок: Igor пишет: Джентль..


Igor пишет:

 цитата:
Джентльмены, вы всерьез собираетесь решать эту задачу средствами Simpl+ ?


Самый короткий путь - это известный путь.
Предложите на "квадратиках" или средствами VTP может? ) Сравним размер кода и приклоним колени перед мастером.
P.S. мы уже её решили

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




ссылка на сообщение  Отправлено: 25.08.16 02:00. Заголовок: Хватание за S+ До то..


Хватание за S+ До того как исследован механизм и принцип взаимодействия пользователя с системой - плохой сигнал. ПО нужно проектировать и потом искать инструмент.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 25.08.16 09:42. Заголовок: Всем спасибо, появил..


Всем спасибо, появилось много вариантов решения задачи. Изучу все)

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 71
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет