|
|
|
|
100755 437 18 1 |
|
Опции темы | Поиск в этой теме |
26.01.2015, 17:34 | 421 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Поднимаю старую тему, пора
За год существования NEXUS в сети интерфейсов стало просто дофига. Многие действительно внушают своей монументальностью. Это реально круто. Тут вот такой вопрос возник, я хочу обатиться к тем, кто судя по всему разобрался как это работает и может помочь в решении вот такой задачки На днях комрад Enn подкинул идею "подключить" цветной индиктор в кнопке фонаря к движку NEXUS. Я пораскинул мозгами и нашел способ как с минимальными переделками в "железе" это реализовать. Но остался самый главый вопрос - что нужно добавить в NEXUS чтобы управлять из его цветным индикатором было удобно. Допустим есть уже готовый UI на нексусе. И нужно дополнить его логикой работы индикатора на самом простом уровне - в зависимости от уровня аккумулятора включать его разными цветами. Тут нужно думать. Особенно если вспонить, что кроме просто свечения, есть еще "хотелка" чтобы он все время тлел. А еще он в FL33 мигает красным когда акк сел в ноль. А еще в том же FL33 он не просто мигает, а мерцает с изменением яркости. Включается и отключается плавно. Надо подумать что перенести в индикатор кнопки чтобы она сама умела это делать, а что оставить себе в NEXUS для управления. |
26.01.2015, 18:26 | 422 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Озвучу пока свои мысли по этому поводу.
С одной строны можно конечно вынести на уровень диагаммы простую функцию загрузки в RGB 3х8 битного слова. 0-0-0 - черный, т.е. индикатор не горит. FF-FF-FF - белый. Ну и так далее. Все остальное делать в nexus последовательно загружая в регистр разные значения. Тяжко... Не думаю что это будет правильно. Мне кажется нужно исходить из "стандартной" логики работы индикатора и максимум функций реализовано на уровне "железа". Ну например. Ограничится простым набором базовых цветов и парой уровней яркости (полная яркость - тление). Все это можно уместить в один "байт". Далее по переходу если нужно "поджечь" индикатор мы просто загружаем в него уровень яркости и выбранный цвет. Если указана полная якость, то индикатор плавно загорается, горит сам несколько секунд и плавно гаснет. Если указана минимальная яркость - индикатор просто горит до следующего нажатия на кнопку или до следующей команды. Пока не знаю как сделать так, чтобы логику работы индикатора в диаграмме отвязать от логики режимов. Думаю... |
26.01.2015, 18:34 | 423 | |
Фонарёвщик со стажем
Регистрация: 10.10.2010 Последняя активность: 28.08.2024 18:19 Адрес: Волгоград
Сообщений: 1500
Сказал(а) спасибо: 545
Поблагодарили: 266 раз(а) в 152 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Цитата:
коррекция кода NEXUS; замена модуля; замена индикатора кнопки = замена головы целиком.
__________________
Лучом, карающего тленность фонаря, Как нитью раны на груди зашила... Из швов, рубцами выложив слова, Я светом мрак навек в себе убила!.. |
|
Поблагодарили: 1 раз |
lux-rc.com (27.01.2015)
|
27.01.2015, 23:58 | 424 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Программирование индикатора в первом приближении:
<шаблон 371го модуля с RGB индикатором в кнопке> Используйте этот шаблон для опытов. 371 совместим с 361 снизу, т.е. если у Вас имеется проект для 361, я его могу переключить на 371 (обратно уже не получится). Одним словом расширять язык можно для любого проекта. Добавлена всего одна операция - RGB У операции всего два параметра - цвет и яркость/сигнал Я предлагаю не усложнять простые вещи и ограничится семью базовыми цветами + черный (отлючено). Для кнопки больше по-моему и не нужно (сейчас FL33 вообще умеет только 3 цвета рисовать) Кроме цвета можно выбрать 2 значения яркости (100% и 5%) или сигнальные режимы (мерцание или маяк). По-моему все интуитивно понятно. Симулятор для данной версии пока от 361, т.е. не показывает индикатор кнопку. Но оследить управление можно в симе по тому, как он перескакивает по нодам. Сим для 371 сделаю быстро как только договоримся, что такой подход управлением индикатором всех устраивает. Ну и "тяжелый" пример - программа FL33 v3.0 c пинкодом, программированием "свелячка" и RGB индикатором. Пример не дописан, но показывает, как можно "прикрутить" логику работы индикатора к существующему алгоритму с минимальным вмешательством в диаграмму. Логика индикатора - справа отдельный блочок. Он не связан "нитками" с основной диаграммой, и это главный плюс подхода. Пришлось задействовать свободный флаг, без него ломал голову - не придумал. Идея работает так. "Индикатор" активируется из любого состояния в случае когда флаг 4 установлен. Далее в зависимости от напряжения последовательными исключениями выбираем цвет и гасим 4й флаг. Я не поленился нарисовал логику для одного-двух ICR аккумуляторов. После выбора цвета через ролбек возвращаемся в ноду, из которой сработал вызов на индикатор. По идее это никак не должно отразиться на работе основной программы (через ролбек востанавливается стостояния которое было перед переходом в отдельную диаграмму, кроме таймера - он сбрасывается в ноль от любого перехода). В основной программе нужно только добавить установку флага 4 в тех местах, когда нужно включить (или обновить) индикатор. Обычно таких мест немного. Далее уже легко придумать, как погасить индикатор по таймеру, или перевести его в режим малой яркости. Что мне пока не нравится. Допустим если нужно перевести индикатор из 100% в 5% - нужно явно указывать цвет. Т.е. опять рисовать всю "бороду" выбора цвета. Лень и кажется напрасной тратой памяти. Какие будут мнения? [Исправлено: lux-rc.com, 28.01.2015 в 01:30] |
28.01.2015, 01:43 | 425 |
Почти не ждун
Регистрация: 15.02.2012 Последняя активность: 06.11.2021 14:48 Адрес: СПб
Сообщений: 745
Сказал(а) спасибо: 217
Поблагодарили: 274 раз(а) в 136 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Мне помнится зеленый-желтый-оранжевый красный. Хотелось бы желтый добавить в конфиг.
Далее, включение индикатора будет происходить моментально или плавным увеличением (снижением) яркости, как сейчас? Или это режимы 100% и beacon соответственно? До появления симулятора вопросов больше нет, на первый взгляд юзабельно.
__________________
|
Поблагодарили: 1 раз |
lux-rc.com (28.01.2015)
|
28.01.2015, 01:55 | 426 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Цитата:
в базовой прошивке вижу четыре уровня аккумулятора - зеленый - много - желтый - прилично - красный - мало - мигающий красный - все а еще можно сделать белый яркий после выключения фонаря в течение нескольких секунд - чтобы полочку подсвечивать, чтобы фонарем мимо не промахнуться цветов благодаря синему каналу стало много, есть из чего выбрать для собственного кастома да, активизация (включение-выключение) хочу сделать плавным как это сейчас делает FL33. Аналогично - реализация маяка и мерцания. Это тоже вспышками с плавным угасанием как это сейчас. Жить это будет глубоко в железе кнопочного узла. Это не поменять из нехуса. [Исправлено: lux-rc.com, 28.01.2015 в 02:00] |
28.01.2015, 06:28 | 427 |
Новичок
Регистрация: 10.12.2012 Последняя активность: 10.10.2016 04:47 Адрес: Забайкальский край
Сообщений: 48
Сказал(а) спасибо: 7
Поблагодарили: 12 раз(а) в 11 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
А что если включение-отключение индикатора делать не отдельными операциями в нексусе, а одной. Т.е. зашить включение и полное плавное отключение индикатора в одну операцию, и включение и плавное затухание до тлеющего состояния во вторую операцию. Далее определяем нужный цвет и запускаем уже кому с тлением, кому с полным выключением.
__________________
Жизнь в лучшем свете! |
28.01.2015, 06:39 | 428 |
Новичок
Регистрация: 10.12.2012 Последняя активность: 10.10.2016 04:47 Адрес: Забайкальский край
Сообщений: 48
Сказал(а) спасибо: 7
Поблагодарили: 12 раз(а) в 11 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Еще не хватает проверки на текущее состояние индикатора. Т.е. каким цветом он горит в данный момент. Это для случая постоянно тлеющего индикатора.
|
28.01.2015, 07:27 | 429 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
|
28.01.2015, 07:29 | 430 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Цитата:
а если кому-то стандартного времени горения будет мало или много? |
28.01.2015, 07:40 | 431 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Ок, допустим так, пусть будет "две команды" (на самом деле все-равно одна, две в одном)
Можно независимо менять цвет и менять яркость/паттерн. Можно и то и другое в одной команде. А можно - отдельно одно от другого. Поэтому обсуждавшаяся логика с тлением выглядит так. Из любого состояния по триггеру выполняются исключения - выбираем цвет и сразу включаем на 100%. Далее по таймеру спустя 5 сек и любого снижаем только яркость до 5%. А полностью гасим явным образом при выключении. По-моему так все красиво. Меняем метаязык? Если кто-то успел написать что-то свое на 371 - файло может сломаться (я руками смогу поправить если что) -------------- вечером в газете, утром в куплете ----------------------- Поправил описание языка и шаблон 371 с простеньким примером В итоге получаем одно действие "RGB" У действия по-прежнему два параметра, но оба - опциональные, т.е. может быть указан любой или оба сразу. Первый параметр - цвет: - черный - красный - зеленый - янтарный - синий - маджента - циан - белый Второй параметр - яркость/паттерн: - выключить - 100% яркости - 5% яркости - мигать Смена цветов происходит мгновенно. Без переходов. За счет этого имеет смысл черный цвет. Им можно мигать и отбивать морзянку (я знаю некоторые это очень любят, три красных и семь синих) Сменя яркости - с плавным переходом. Это делает сама кнопка на уровне "железа". Мигалка тоже реализована внутри кнопка - мигает так, как сейчас мигает красным FL33 - т.е. быстрые вспышки с затуханием по экспоненте. Если кто-то имеет что-то против такого решения - поднимаем руку. Пару дней на опыты хватит? [Исправлено: lux-rc.com, 28.01.2015 в 07:57] |
28.01.2015, 08:56 | 432 |
Новичок
Регистрация: 10.12.2012 Последняя активность: 10.10.2016 04:47 Адрес: Забайкальский край
Сообщений: 48
Сказал(а) спасибо: 7
Поблагодарили: 12 раз(а) в 11 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
В каких случаях нужно будет устанавливать флаг и, соответственно, запускать индикатор:
- при активации режима - при длительной работе какого-то из режимов В первом случае все просто: включаем режим и вместе с ним флаг. Во втором случае нужно чтобы тлеющий индикатор просыпался (загорал на 100%) только тогда, когда ему нужно цвет поменять. Т.е. каждое энное количество секунд идет проверка состояния и индикатор либо вспыхивает, либо продолжает тлеть таким же цветом. Поэтому и нужна проверка текущего состояния-цвета индикатора. |
Поблагодарили: 1 раз |
lux-rc.com (28.01.2015)
|
28.01.2015, 16:46 | 433 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Цитата:
действительно, было бы правильно чтобы треющий индикатор просыпался в случае когда уровень заряда падает на ступеньку. А если он просто будет раз в 30 сек просыпаться независимо от изменения состояния акка? тут вот какая дилема. очень не хочется "перегружать" железо. Оно сейчас заточено на одностороннюю передачу от модуля в кнопку. Обратное если и делать - то по очень большой нужде. Я вот что думаю. А нельзя ли тоже самое устроить с помощью слотов памяти в nexus? На флагах это можно написать хоть сейчас (допустим если уровней индикации четыре - то хватит и двух флажков). Но на флагах получатся "танцы с бубном". Да и мало их, они нужнее в других местах. Но если допустим расширить возможности слотов? Сейчас они заточены на сохранение режима работы регулятора. Нет возможности напрямую загружать в слот константу или сравнивать с константой. А если это реализовать, то это много где может оказаться полезным. В частности сейчас для того, чтобы инициализировать заводскую настройку любимого режима его сначала приходтся включить (буквально включить свет) и только потом загрузить текущий режим в слот. Потом погасить свет. Три операции вместо одной. Некрасивый хак. Предлагается. 1) Добавить новое условие. Значение слота < или > некоторого выбранного значения 2) Добавить действие. Загрузить в слот произвольное значение из списка. Тогда вместо флажка можно использовать слот и условное значение степени разряда. 0 - это условное начальное значение акка (новый режим). Загрузка нуля означает принудительное включение индикации (при нажатии на кнопку). Далее по результатам сравнения в слот загружается текущее значение в зависимости от напряжения. По таймеру дергаем эту проверку. Каждый раз снова проверяется напряжение и если значение оказывается больше сохраненного - включаем индикатор на макс с одновременным обновлением цвета и сохранением нового значения в слот. Не уверен что смог передать идею, но кажется это должно сработать, нужно нарисовать схемку и допилить сим. Важное замечание! Все эти "докрутки" не влияют на прошивки, написаные ранее на 361alpha. Если нужно, чтобы в Вашем уже написанном UI появились новые функции - сигнальте, я поправлю в коде на 371alpha. Если вы хотите попробовать 371аlpha с нуля - используйте этот шаблон [Исправлено: lux-rc.com, 28.01.2015 в 16:58] |
29.01.2015, 04:13 | 434 |
Новичок
Регистрация: 10.12.2012 Последняя активность: 10.10.2016 04:47 Адрес: Забайкальский край
Сообщений: 48
Сказал(а) спасибо: 7
Поблагодарили: 12 раз(а) в 11 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Идея понятна. Если не ошибаюсь, то такую возможность работы со слотами уже обсуждали. Думаю поможет не только для программирования индикации, но и поможет уменьшить количество нодов и связей в схемах.
|
29.01.2015, 05:02 | 435 |
Ветеран Фонарёвки
Регистрация: 11.02.2012 Последняя активность: Вчера 15:12
Сообщений: 3677
Сказал(а) спасибо: 3536
Поблагодарили: 1971 раз(а) в 1050 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Основной модуль может запомнить какой цвет он задавал в предыдущий раз. Это сильно проще.
Хотя если модуль совсем-совсем отключает собственное питание на время сна и просыпается по отдельному таймеру, то да, может пригодиться.
__________________
Не стреляйте в программиста, он паяет как умеет. [Исправлено: m72, 29.01.2015 в 05:05] |
30.01.2015, 03:26 | 436 |
Ветеран Фонарёвки
Регистрация: 11.02.2012 Последняя активность: Вчера 15:12
Сообщений: 3677
Сказал(а) спасибо: 3536
Поблагодарили: 1971 раз(а) в 1050 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Правильно ли я понимаю, что...
Есть два модуля: кнопко и светило (держало и хлебало). Раньше кнопочный модуль сам измерял напряжение и показывал его, то сейчас информацию ему предполагается выдавать со светильного. Когда индикатор просыпается по нажатию на кнопку, то всё просто и понятно. Нажатие подаёт питание, схема прогружается с нуля, включает подхват питания. Проснулись, замерили, поняли чем именно надо отчитаться, отчитались и баиньки. Без внешнего воздействия всё отключено и изнутри побудке не поддаётся. А что делать если индикатор "тлеет" (1-5%)? Какой механизм _с малым потреблением_ заставит светильный модуль с Нексусом проснуться раз в минуту (к примеру), замерить батарейку, пробежаться по программе, и если уровень изменился то поменять цвет свечения? Часовой микросхемы и кварца к ней на фотках не видел. Или в кнопочный модуль можно (и желательно) заложить следующие фишки: 1. Выключиться навечно (т.е. до внешнего воздействия: замена батарейки, нажатие на кнопку). 2. Выставить цвет свечения + яркость. 3. Заставить разбудить модуль с нексусом через Х секунд. 4. Пока кнопочный модуль светится ему можно доверить хранение какой-нибудь переменной, всё равно на кнопочном контроллере напряжение будет. В общем не зная кто во время сна спит и как крепко (может вообще без питания, зато экономно) давать советы по реализации управления индикатором проблематично. Кстати, еще вопрос про нексус. Можно ли сделать многозадачность в нескольких графах? Грубо говоря совершенно независимая нитка управления светом, нитка управления индикатором уровня и нитка считающая число нажатий на клавишу. К примеру после каждого 10-го нажатия будет моргать маячок. По идее реализация многозадачности довольно проста. Просто каждая нитка имеет собственную точку входа "подали питание", а дальше уже каждая сама по себе. Интерес еще бы представил механизм доступа к нескольким глобальным флагам и переходам по их изменению, но для двух ниток свет/показ заряда это не обязательно. [Исправлено: m72, 30.01.2015 в 03:29] |
31.01.2015, 16:59 | 437 | |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Цитата:
- либо установить цвет, это он отрабатываем мгновенно, независимо от текущей яркости и выбранного режима. - либо установить яркость или включить режим мигания. эти операции индикатор отрабатывает с плавым переходом. две команды могут прийти в одном "пакете", тогда будет практически одновременно сделано и то и другое. ---------------- по поводу "спячки" индикатора все не так просто. я не буду делать так, чтобы индикатор работал постоянно. я и в новой версии хочу сделать схему, которая будет рвать физически цепь на землю и полностью отключать питание индикатора. в этом случае все его текущие настройки будут забыты. т.е. на уровне диаграммы NEXUS нужно иметь в виду - после полного перезапуска индикатора заново заливать в него и цвет, и режим работы. Сейчас временем жизни индиатора управляет 334+ модуль. Индикатор просыпается по нажатию, для этого 334+ должен выставить флаг что он хочет чтобы индикатор проснулся. Если 334+ сбрасывает этот флаг, то индикатор в течение еще 10-15 секунд ждет и после этого рвет землю Новый индикатор я пока не программировал, но хочу изменить логику жизни на более простую. Главная вводная - это тот факт, что в ждущем режиме когда RGB не горят - ток потребления индикатора очень небольшой. В новой версии он вообще равен току ждущего режима контроллера плюс утечки LDO, т.к. делителя напряжения уже нет - индикатор не следит за батареей. Поэтому утечка в индикаторе вредна только если речь идет о большом времени в неактивном режиме. Это грубо говоря ситуация, когда фонарь с аккумулятором валяется без дела больше суток. Поэтому предлагается уже не обращать на флаг из 371, а считать время с последней команды от него. Если 371 не посылает команд в течение допустим суток и если в течении суток никто не нажимает на кнопку, то мы делаем вывод что фонарь на хранении, им не пользуются и гасим полностью индикатор, отрывая его от земли. |
|
01.02.2015, 04:10 | 438 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Цитата:
Цитата:
а таймер и в кнопке и в светиле имеется. да, без кваца, не такой точный, но он там есть. Цитата:
2 - так оно уже и описано в NEXUS, см примеры выше по ссылка (пока без симулятора) 3 - нексус будить не надо, он всегда активен, даже в стендбае, когда фонарь не горит. мигающий локатор - это тоже NEXUS. 4 - это не нужно. кнопка дожна быть настолько "тупой", насколько это возможно. Цитата:
Язык NEXUS задумывался как инстумент вовсе не прогрммиста. В таком качестве ему грош цена. Программист могущий программировать многозадачные приложения и так справится с написанием кода для контроллера - ему и на C нормально пишется. Я задумал NEXUS как интструмент постановщика задач. В этом случае он обязан быть настолько простым, насколько это возможно для решения задачек упавления такими устройствами как фонарик. Концепция конечного автомата - штука простая. И если не сыпать умными терминами, то на пальцах объяснить - не проблема. Особенно если есть пример перед глазами. Я уже накропал пример интерфейса с индикатором на базе алгоритма FL33 v3.0. Графически логика индикатора там выглядит как отдельный "куст", ну т.е. это маленькая самостоятельная диагамка. Интуитивно понятная. Т.е. ее работа заключается в постом правиле, что независимо от текущего состояния при наличии флага выполнить цепочку сравнений, раскрасить кнопку в соотв. цвет и венуться. по сути это очень похоже на обаботку прерывний. где прерывание описано неким условием. |