Страница 1 из 1

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 18.09.2015{, 00:44}
Сергей
Добавить блок Increment/Decrement переменной.

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 18.09.2015{, 02:32}
Сергей
Вопрос снят. Блок прикрепил.

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 18.09.2015{, 07:33}
kossn93
модеры, соберите по возможности самодельные блоки и перенесите их в раздел соответствующий( например ,загрузки-блоки пользователей, а тут только ссылки на них оставляйте)

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 18.09.2015{, 12:04}
Сергей
kossn93, для того что бы их перенести, надо убедится в их работоспособности. А для этого нужно тестировать и голосовать за тему в которой описывается блок.
Я могу этот блок перенести в загрузки. Но вдруг он глючный. Вдруг я где то ошибся.
Поэтому кому надо, тестируйте, голосуйте и отписывайтесь что блок рабочий. Потом перенесем конечно.

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 24.12.2017{, 01:04}
brig62
Столкнулся в проекте с необходимостью использования данного блока. Проверить пока не могу. Правильно я его подключил?


Добавлено (24.12.2017, 01:04)
---------------------------------------------
Вопрос снимаю. Буду использовать командоаппарат.

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 09.09.2018{, 13:24}
Oleg1345140
И все же лучше стандартный такой блок, тем более его реализация явно не будет сложной (код для него займет строчку где то :) ).

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 09.09.2018{, 20:07}
Naladchik
А смысл в таком блоке если все решается элементарной математикой?

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 09.09.2018{, 23:01}
Oleg1345140
Naladchik писал(а):
09.09.2018{, 20:07}
А смысл в таком блоке если все решается элементарной математикой?
Экономией памяти. все же i++ меньше отъесть нежели код описанный выше. хотя кто его знает.

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 10.09.2018{, 00:42}
Labu559
Oleg1345140 писал(а):
09.09.2018{, 13:24}
код для него займет строчку где то
Naladchik писал(а):
09.09.2018{, 20:07}
А смысл в таком блоке если все решается элементарной математикой
Для нажатия кнопки 1 секунда- мало, а для выполнения кода несколько десятков/сотен циклов. Сколько насчитает математика? Тут нужен контроль предыдущего состояния, опрос по времени и иногда контроль времени пребывания в активном состоянии (устойчивом/устранение дребезга контактов). Получится довольно длинная строчка кода :).
Тогда на мой взгляд минимальная конфигурация из штатных блоков
принимает видПоказать
Value+-.png
Value+-.png (9.58 КБ) 2047 просмотров
Для кругового изменения переменной нужно вывести на счётчике достижение установленного значения и сброс, для управления кнопками добавить блок Bounce. Это теоретический пример, в железе не проверял и в какой последовательности расставит блоки FLProg тоже.
А готовые блоки уже давно есть и на FBD и Code, например здесь, или здесь или здесь. Хотелка древняя.

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 10.09.2018{, 10:02}
Naladchik
Oleg1345140 писал(а):
09.09.2018{, 23:01}
Экономией памяти. все же i++ меньше отъесть нежели код описанный выше
по поводу памяти, особенно в проектах FLProg - смешно. тут она и без этого используется, мягко говоря, не оптимально. Чего стоят задвоение переменных при использовании пользовательских блоков да и и использование int там где вполне хватает byte и Long там где хватило бы Uint. Да не будем о грустном.
Ну а что касается кода, то
_gtv1 = (_gtv1)+(1);
по сути тоже самое что и i++; т.е просто математика, это если убрать у переменной разрешение записи
СпойлерПоказать
Inc.png
Inc.png (1.54 КБ) 2006 просмотров
Разница так уж принципиальна? По моему одно и тоже. Мне кажется, что компилятор со мной согласится.
"...большинство современных компиляторов языка Си уже без проблем сами заменяют арифметические выражения x = x + 1 или x += 1 на низкоуровневый инкремент (++x) на этапе оптимизации и компиляции." - Wiki

if (_gtv2) {_gtv1 = (_gtv1)+(1);}
а тут используется переменная с разрешением записи.
СпойлерПоказать
Inc_.png
Inc_.png (2.63 КБ) 2006 просмотров
Labu559 писал(а):
10.09.2018{, 00:42}
Сколько насчитает математика?
Пока будет разрешение записи - будет считать (один цикл программы - одна операция инкремента), нет разрешения - нет счета.
av писал(а):
10.09.2018{, 00:35}
Это столько же переменных для разрешения записи нужно добавить.
А тут уже по обстоятельствам, может несколько а может и ни одной.

Вот такой вариант. 452 и 11 байт.
Inc_Dec.png
Inc_Dec.flp
(145.05 КБ) 66 скачиваний
А использовать еще и счетчик для хранения значения, которое и так хранится в переменной это, на мой взгляд, избыточно.
Особенно в свете "...Экономии памяти..." :smile38:

P.S. Никто так и не сказал а для чего нужны такие навороты? Начали то с простейших инкремента и декремента.

Отправлено спустя 13 минут 39 секунд:
Сброс при достижении значения делать не стал, если кому нужно то компаратор прилепить секундное дело.

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 10.09.2018{, 10:38}
Naladchik
Labu559 писал(а):
10.09.2018{, 00:42}
Для кругового изменения переменной нужно вывести на счётчике достижение установленного значения и сброс
Или так. Круговой счетчик.
СпойлерПоказать
Inc_Dec_Ring.png

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 10.09.2018{, 11:06}
Naladchik
А вообще я уже давно предлагал Сергею модернизировать стандартный счетчик и добавить все эти навороты (хотя бы что бы было два выхода "достижение установленного значения") да видать все руки у него не дойдут до этой мелочи.

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 10.09.2018{, 16:08}
Labu559
Naladchik писал(а):
10.09.2018{, 10:16}
Пока будет разрешение записи - будет считать (один цикл программы - одна операция инкремента), нет разрешения - нет счета.
Да, и я о том же. Исходя из этого нам нужно считать/инкреминировать/декреминировать не циклы программы, пока одна из переменных increment или decrement пребывает в HIGH, а отсчитывать / инкреминировать/декреминировать колличество этих команд или нажатий кнопок от переменной Value.
Naladchik писал(а):
10.09.2018{, 10:16}
А использовать еще и счетчик для хранения значения, которое и так хранится в переменной это, на мой взгляд, избыточно.
Особенно в свете "...Экономии памяти...
Применение счётчика напрямую связано с
Labu559 писал(а):
10.09.2018{, 00:42}
контроль предыдущего состояния
который в нём уже присутствует- смотрим код счётчика. Если будет удержание указанных выше переменных/кнопок в HIGH, независимо от колличества циклов Loop, будет инкремент/декремент на 1.
К сожалению в отчётах Arduino IDE от нас ускользает колличество инструкций процессора, что не менее важно чем объёмы используемых типов памяти, но это уже дебри. :(
Naladchik писал(а):
10.09.2018{, 11:06}
предлагал Сергею модернизировать стандартный счетчик и добавить все эти навороты (хотя бы что бы было два выхода "достижение установленного значения")
Базовый счётчик, на мой взгляд (хотя я тоже предлагал ув. Автору его модернизировать в ином, правда, плане) вполне самодостаточен. А то что предлагаете Вы,
легко реализуется с помощью внешних елементов (обведено рамкой).Показать
Inc_Dec_R2.png
Достижение верхнего или нижнего уровней
Спасибо за интересный диалог!

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 10.09.2018{, 17:26}
Naladchik
Labu559 писал(а):
10.09.2018{, 16:08}
легко реализуется с помощью внешних елементов (обведено рамкой).
СпойлерПоказать
123.png
123.png (10.54 КБ) 1935 просмотров
А вы его в работе проверяли? по моему тут с логикой у Вас явный непорядок. При каждой команде increment/decrement Вы предустанавливаете значение счетчика max/min.
Далее, на вход счетчика "пороговое значение" Вы подаете через промежуточную переменную значение его (счетчика) выхода? :smile37:

Хотя общую идею я понял.
Но вот сам факт присваивания переменной Value значения счетчика и получение двух глобальных переменных с одним и тем же значением крайне не приветствую.

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 11.09.2018{, 10:40}
Labu559
Naladchik писал(а):
10.09.2018{, 17:26}
А вы его в работе проверяли?
если можно так сказать, да. Просто применял описаный алгоритм без кольцевого счёта в своём проекте, НО!!!
Naladchik писал(а):
10.09.2018{, 17:26}
по моему тут с логикой у Вас явный непорядок
Вы совершенно правы на счёт кольцевого счёта, вход SP должен остаться не подключённым. С кольцевым счётчиком я поспешил, с наскока и без утяжеления , и короче чем у ув. Boroda в 6-м сообщении пока не получилось. Попробовал симулировать в Протеусе. Без кольца проект успешный, в кольцевом засада в плане отрицательных чисел, но я кажется понял что Вы имели ввиду под
Naladchik писал(а):
10.09.2018{, 11:06}
два выхода "достижение установленного значения"
И вспомнил что где-то проходило сообщение ув. Sancho об разных условиях сравнения в счётчике < и >= при счёте отрицательных чисел и положительных. Спасибо Вам за тренировку мозга.
P.S. Если это Вы на форуме Казуса о Протеусе, то именно с Вашей публичной рекоммендации я начал знакомство с FLProg. :smile9:
(Поставил себе задачу в плане обучения- использовать только свои ПБлоки, счётчики тоже использую свои с моими собственными недостатками :), а чужие изучаю если свои очень не нравятся.)

Добавить блок увеличения/уменьшения переменной на 1 (+1, -1)

Добавлено: 11.09.2018{, 10:49}
Naladchik
Labu559 писал(а):
11.09.2018{, 10:40}
P.S. Если это Вы на форуме Казуса о Протеусе
Нет, не я.