Arduino. Сага о кнопках
- Войдите на сайт для отправки комментариев
Доброго всем времени суток!
Чтение и участие в форуме подвигло меня написать работу под названием "Arduino. Сага о кнопках".
Работа имеет подзаголовок: "Саморекомендовано в качестве учебно-методического пособия
по осмысленной деятельности". Думаю, работа будет полезна начинающим "ардуинщикам", искренне желающим продвигаться в этом деле. А может, и не только им. :)
Работа занимает 44 страницы, и публиковать ее здесь он-лайн я не стал. Работу можно скачать целиком в формате pdf по ссылке
https://yadi.sk/i/VjfxWUTWjPQfW
Скачивать или нет, можно определить для себя по содержанию работы:
Оно тебе надо? 3
Ну что ты в этой Дуне нашёл? 4
Быстрый старт 4
Разнообразность решаемых задач 4
Распространенность 5
Возможность дальнейшего роста 5
Шкурные интересы 5
Учите матчасть! 6
Механические 7
Сенсорные 7
Квазисенсорные 8
Дискретные 11
Аналоговые 11
Кодовые 11
Интерфейсные 11
Подключение дискретных кнопок 11
Подключение аналоговых кнопок 16
Подключение кодовых кнопок 19
Песнь кнопки сладкоголосой 22
Ой! На меня надавили 22
Предъявите квитанцию 22
Аварийный "гудок" 23
И чё делать? 24
Бесчеловечные кнопки 26
В тебе нет ничего человеческого! 26
Особенности стиля "техно" 27
Из жизни неживого 28
Общие рекомендации 29
От слов к делу 31
Постановка задачи 31
Выбор конструктива кнопок 31
Выбор схемотехники клавиатуры 32
Без духа плоть мертва 34
Постановка задачи 34
Постановка отладочного эксперимента 35
Структура ПО и данных 36
Ссылки: 39
Приложение А 40
Приложение Б 41
Если корифеи найдут в тексте явные промахи,
"и на старуху бывает проруха", то при ответственной аргументации готов
сделать в тексте соответствующие исправления.
Duino A.R., Критика принимается? :) Самое главное - это по-моему черезчур много букв и лирики, а полезной информации, картинок, схем и программ относительно мало. Например схему типичных матричных кнопок вы как пример привели, а схемы аналоговых кнопок нет. АЦП почему то рассматривается на примере динозавров типа 572ПА1А, по моему лучше подробнее рассказать про конкретный АЦП меги, раз пишите для ардуинщиков. И ещё выражения типа: "Подтягивающие резисторы лучше всегда включать между входом и линией питания." несколько некорректны, т.к. подтягивающие резисторы никак иначе включить нельзя, для обратного включения есть отдельный термин -стягивающие резисторы "Pull-Down", о котором вы видимо позабыли.
Duino A.R., Критика принимается? :) Самое главное - это по-моему черезчур много букв и лирики, а полезной информации, картинок, схем и программ относительно мало. Например схему типичных матричных кнопок вы как пример привели, а схемы аналоговых кнопок нет. АЦП почему то рассматривается на примере динозавров типа 572ПА1А, по моему лучше подробнее рассказать про конкретный АЦП меги, раз пишите для ардуинщиков. И ещё выражения типа: "Подтягивающие резисторы лучше всегда включать между входом и линией питания." несколько некорректны, т.к. подтягивающие резисторы никак иначе включить нельзя, для обратного включения есть отдельный термин -стягивающие резисторы "Pull-Down", о котором вы видимо позабыли.
1. Конструктивная критика принимается . Я об этом написал сразу.
2. У меня нет задачи научить конкретным проводам. Я ставил задачу показать, как следует включать мозги. Из того, что я вижу на форуме, в 90% случаев осмысленная постановка технической задачи отсутствует. Люди что-то замысливают, замысел по жизни "не лезет", и они трбуют от форумчан "не учить жить", а показать пару "правильных" пинов и скетч впридачу, чтобы их замысел "стал лезть". Я пропагандирую другой подход. Поэтому у меня много букв. :)
3. Кокнкретных АЦП может быть много разных. Я показал на конкретном примере, куда в первую очередь, следует смотреть при их выборе и использовании.
4. Я описал 3 своих резона, почему лучше "подтягивающие" резисторы. О "стягивающих" тоже упомянул, хотя термин "pull-down" не использовал.
5. Для неотличимых внешне шилдов с экраном и аналоговыми кнопками я встречал несколько разных схем. Поэтому и не стал их приводить. Если считаете, что это нужно, можно включить их в "следующее издание". :)
6. Если Вы чувствуете в себе желание и силы, можете подготовить собственный дополнительный материал с большим количеством схем и программ для 2-го издания "переработанного и дополненного". :)
Очень серьёзный и качественный текст, спасибо Вам за труд. Легкость стиля вызывает добрую зависть.
Есть еще одна тема, вызывающая большие трудности у новичков - работа с millis() vs delay(). Много по ней написано, но и она, на мой взгляд, была бы достойна Вашего пера.
и мне понравилось
единственное замечание - повествованию не хватает картинок и кусочков кода по ходу изложения
за труд СПАСИБО!
жаль, нет времени почитать... Возможно, не хватает в заголовке "Закон Ома" – почему-то все валятся на элементарных вещах...
скачал, обещаю почитать... :)
ЗЫ на титуле поставьте версию документа :)
Очень серьёзный и качественный текст, спасибо Вам за труд. Легкость стиля вызывает добрую зависть.
Есть еще одна тема, вызывающая большие трудности у новичков - работа с millis() vs delay(). Много по ней написано, но и она, на мой взгляд, была бы достойна Вашего пера.
1. Рад, что Вам понравилось. Спасибо за добрые слова.
2. В примере (Приложение Б) при работе с клавиатурой ни одного delay() нет. Специально разбирать для учебной задачи вариант delay() против millis() мне было не с руки. Я delay() нигде по жизни не использую. :) Мне трудно привести не выдуманные, а реальные и наиболее частые промахи и варианты их исправления.
2. В примере (Приложение Б) при работе с клавиатурой ни одного delay() нет. Специально разбирать для учебной задачи вариант delay() против millis() мне было не с руки. Я delay() нигде по жизни не использую. :) Мне трудно привести не выдуманные, а реальные и наиболее частые промахи и варианты их исправления.
любой пример работы устройства с кнопками - выход по нажатию кнопки...
единственное замечание - повествованию не хватает картинок и кусочков кода по ходу изложения
Это можно поправить, но тогда мне точно нужно знать, каких именно картинок и какого кода не хватает. Картинки и код для Ардуино - для меня отдельная трудоемкая задача. Абсолютное большинство практического опыта набрано на совсем другом железе и в других программных средах. Многих уже и в помине нет. Да и прыткость уже того... Стал свой пример от лишнего чистить - пропотел...
Вполне можете сами поучавствовать в проекте, добавив необходимое (желаемое) в "новое издание" с указанием авторства. :)
Вполне можете сами поучавствовать в проекте, добавив необходимое (желаемое) в "новое издание" ...
как прочитаю, поучаствую...
Об этом и речь. Всё начинается с того, что люди не знают, чего хотят. Или не умеют сначала сформулировать, а потом формализовать свои желания (в части техники).
Будет новая версия документа, появится она и на титуле. :)
Возможно, не хватает в заголовке "Закон Ома"
Упростим себе задачу. Будем для начала работать с теми, кто отличает "Закон Ома" от "Закона ОМОНа". :)
всё это хорошо, но за обзывание кнопочного джойстика "аналоговыми кнопками" и смешиваю халабуды в одну кучу с тактовыми кнопками на цифровых входах - повбывавбы.
всё это хорошо
Ото ж, разбудили дитятку... Кышь, уси, кышь. Нихай трохе ще поспыть.
Ипал я такие "джойстики". Недоразумение. Хорошо купил не много. Кнопками назвать - польстить.
Ну не мальчик ведь уже халабуды смешивать. То в эвропах халабуда - коктейль, а тут - всегда ёрш получается.
Кучки разные! Со смешиванием халабуды надо завязывать. Нарыбачился, видать...
повбывавбы.
"В очередь, Клапауции, в очередь!" :)
070, чего к человеку прицепился....
работа нормальная и автор молодец...
070, чего к человеку прицепился....
работа нормальная и автор молодец...
это я прицепился? я написал, что нельзя называть аналоговыми кнопками аналоговый кнопочный джойстик.
всё. при чём тут автор, вообще - Лешак аналогичной ересью страдал, при всём моём ега уважении, как программиста, но сам он признавал, что дерево в железе.
ну ладно ладно, не кипятись
Доброго всем времени суток!
По результатам обсуждения вышла 2-я версия "Саги о кнопках" (переработанная и дополненная). В материал были внесены следующие изменения:
Версию 2.0 можно скачать одним файлом в формате pdf по ссылке
https://yadi.sk/d/nXvEorbUjf3oX
Доброго всем времени суток!
.............................................
Версию 2.0 можно скачать одним файлом в формате pdf по ссылке
https://yadi.sk/d/nXvEorbUjf3oX
Хотел почитать, но
Что это такое?
Что это такое?
ничего - скачай и проверь файл здесь https://www.virustotal.com/
Прочитал.
Понравилось.
Правда, хотя лично я прочитал все с неослабевающим интересом, не уверен, что таким же образом поступит и некий усредненный читатель: согласен с уже не раз высказанным мнением, что в статье не хватает иллюстраций. Если в техническом отчете наиболее естественным является размещение принципиальной схемы в приложении, то для публикации было бы лучше раздраконить схему на кусочки и размещать эти кусочки по мере описания. А там, где на протяжении 1-2 страниц никакие илюстрации не предусмотрены, разместить хотя бы юмористические рисунки или забавные картинки в тему.
Немного разочаровало, что обещание "показать, каким образом ставиться техническая задача и как она решается" не получило вразумительного воплощения.
Цепочка от постановки до решения занимает менее четверти от всего объема статьи, на этом отрезке повторяется дважды и оба раза не очень убедительно.
перспективное решение.
В конкретном проекте не бывает "обычно" - либо 7 свободных контактов есть, либо - нет. Если же мы хотим сделать не конкретное, а именно универсальное решение, никакого другого минуса нет - мы дважды говорим об одном и том же.
Но в целом - побольше бы таких статей. А замечания - лишь с целью улучшить, если не эту статью, то, хотя бы, следующие, которые, я надеюсь, Вы еще напишете.
Прочитал.
Понравилось.
Спасибо. "Доброе слово и кошке" приятно, а уж автору - тем более.
Правда, хотя лично я прочитал все с неослабевающим интересом, не уверен, что таким же образом поступит и некий усредненный читатель: согласен с уже не раз высказанным мнением, что в статье не хватает иллюстраций.
1. Рискну предположить, что "некий усредненный читатель" любому чтению вообще может с легкостью предпочесть попкорн, пиво или сериал (или все вкупе). Попадать в такого читателя... Весьма сложная задача.
2. Да, иллюстраций мало. Согласен. Если бы Ардуино была для меня полем постоянной деятельности, я бы знал откуда можно быстро понадергать подходящих схем, картинок, скетчей. Для меня Ардуино "не место имения, а предлог". Поэтому с иллюстративным материалом тяжело. На что в первой версии явно показали пальцем, там добавил. Причем для аналогового джойстика схему пришлось рисовать самому по имеющемуся образцу, поскольку качество схем, найденных в инете, оказалось неудовлетворительным.
А там, где на протяжении 1-2 страниц никакие илюстрации не предусмотрены, разместить хотя бы юмористические рисунки или забавные картинки в тему.
Я это понимаю. Мне неоднократно приходилось писать статьи для детей. Там иллюстрации делали профессиональные художники. :) Это трудоемко. При отсутствии явного официального или социального заказа выкладываться по полной в самому себе придуманной задаче для "научения" других, заранее неизвестных тебе и разных людей... Можно одновременно и промахнуться, и выдохнуться. Поэтому текста больше (идет легче), картинок меньше (силы экономит).
Немного разочаровало, что обещание "показать, каким образом ставиться техническая задача и как она решается" не получило вразумительного воплощения.
Цепочка от постановки до решения занимает менее четверти от всего объема статьи, на этом отрезке повторяется дважды и оба раза не очень убедительно.
Душа сначала развернулась, потом свернулась, потом снова развернулась, но не так широко. :) Если строго следовать озвученной задачяе, то 3/4 работы нужно было бы опустить, подробно разжевав шаги решения на конкретном примере. Самому захотелось сазать больше, больше и сказал. На этом фоне "официальная постановка задачи" несколько потерялась. Ну да и ладно. Если честно... Не учебник. Саморекомендованное пособие. :)
В конкретном проекте не бывает "обычно" - либо 7 свободных контактов есть, либо - нет. Если же мы хотим сделать не конкретное, а именно универсальное решение, никакого другого минуса нет - мы дважды говорим об одном и том же.
Согласен. Конкретный пример был притянут за уши с такой силой, что они чуть было не оторвались. :) По мере описания он перетек в более универсальный вариант. Текст неоднократно правился, но шероховатости остались.
Но в целом - побольше бы таких статей. А замечания - лишь с целью улучшить, если не эту статью, то, хотя бы, следующие, которые, я надеюсь, Вы еще напишете.
Также как экзамен - это не попытка унизить ученика, а последняя возможность его научить, так и обоснованные и корректные замечания читателя - признак его заинтересованности в материале. :) Насчет "еще". Задач нет, которые бы меня за душу трогали. А без этого...
Если строго следовать озвученной задачяе, то 3/4 работы нужно было бы опустить, подробно разжевав шаги решения на конкретном примере. Самому захотелось сазать больше, больше и сказал. На этом фоне "официальная постановка задачи" несколько потерялась. Ну да и ладно. Если честно... Не учебник. Саморекомендованное пособие. :)
Нет, не так. Совсем не так!
В статье просто блестяще проиллюстрирована мысль, что такой простой объект как кнопка... на самом деле совсем не так прост.
И уже только этого достаточно, чтобы сказать, что статья замечательная.
Также как экзамен - это не попытка унизить ученика, а последняя возможность его научить, так и обоснованные и корректные замечания читателя - признак его заинтересованности в материале. :) Насчет "еще". Задач нет, которые бы меня за душу трогали. А без этого...
Так появятся.
А по поводу "нужно больше картинок", до этого я отнюдь не сам дошел. Наверное, мог бы и сам, но "старшие товарищи" не дали - объяснили все доступно в самом начале моей журналистской деятельности. Иак что это опыт людей безусловно профессиональных.
Так появятся.
Хочется надеятся. Пока по жизни, как Фридрих Иероним, сам себя за волосы из болота. :)
А по поводу "нужно больше картинок", до этого я отнюдь не сам дошел. Наверное, мог бы и сам, но "старшие товарищи" не дали - объяснили все доступно в самом начале моей журналистской деятельности. Иак что это опыт людей безусловно профессиональных.
Да никакого сомнения в необходимости большего (и просто большого) количества картинок нет. Трудоемкость очень высока. Либо сейчас и минимум картинок, либо... вплоть до никогда. Только поэтому.
andriano, поддержу автора. Все таки форум здесь достаточно технический и рисовать комиксы для дебилов есть неблагодарное занятие. Любой дееспособный человек в состоянии осилить 40 страниц текста без привлекушек внимания, а если нет, то это ему и не надо. Да и слог написания весьма легкий для прочтения. Автору благодарность.
Респект и уважуха! Автор пиши ещё :)
Хорошо написано.
Вот еще тема: Моторы и сервы.
Респект и уважуха! Автор пиши ещё :)
Благодарствуйте! (всяко лучше, чем АМ КГ :))
Я старался. :)
Легко! Только если сразу... то там Ардуины не будет. Совсем. :)) А это не политкорректно по отношению к интернет-ресурсу. :)
Мотивация, которая бы сподвигла меня теперь уже вместе с Дуней очередной раз пройти собственноручно по электромеханическим приводам, на сегодня отсутствует. Появится ли, не знаю.
то там Ардуины не будет. Совсем. :)) А это не политкорректно по отношению к интернет-ресурсу. :)
Отнюдь.
Неполиткорректно - это что-нибудь про Мак ПиСи или, на худой конец, "малину".
А всякая электромеханика, для упревления которой, собственно, и используется Ардуино, - вполне в тему.
огромное спасибо за труд!!!
Каюсь, еще не осилил 1й вариант до конца – не было времени прочитать его вдумчиво (есть у меня сложности с восприятием печатной информации, как-то картинки, графики и схемы для меня более информативны). Это к слову об отсутствии картинок!!!
Я обещал помочь, помогу, но не так быстро как мне этого хотелось бы – это первое, к автору.
Второе – очень сожалею, что до сих пор никто не может реализовать правку автором (ТС) первого поста, в который можно выкладывать квинтэссенцию всего топика.
огромное спасибо за труд!!!
Огромное пожалуйста! :)
(есть у меня сложности с восприятием печатной информации, как-то картинки, графики и схемы для меня более информативны). Это к слову об отсутствии картинок!!!
Телевидение вполне закономерно практически вытеснило радио. У меня картинок мало из-за большой трудоемкости. Я "отвечаю за базар". Очевидные иллюстрации из инета надергать можно, и "их есть у меня". А вот схемы, скетчи. Их и найти тяжелей, и проверять надо. Поэтому - минимум.
Я обещал помочь, помогу, но не так быстро как мне этого хотелось бы – это первое, к автору.
Жизнь проста для того, кто ее не пробовал. :)
Второе – очень сожалею, что до сих пор никто не может реализовать правку автором (ТС) первого поста, в который можно выкладывать квинтэссенцию всего топика.
Да, это реальный "минус" форума. Если буду открывать новую тему, в первом посте поставлю только "ДВС!". Думаю, что скачивание Версии 2.0 затруднено тем, что люди банально не могут в потоке сообщений быстро найти перечень изменений и новую ссылку.
Duino A.R.
а правда что нельзя организовать такой алгоритм, нажал кнопку загорелся светодиод, нажал повторно потух, удержание кнопки вызывает меню, одинарное нажатие выполнить первую программу, двойное вторую, тройное третью и тд?
Duino A.R.
а правда что нельзя организовать такой алгоритм, нажал кнопку загорелся светодиод, нажал повторно потух, удержание кнопки вызывает меню, одинарное нажатие выполнить первую программу, двойное вторую, тройное третью и тд?
melnibo, ну, я же тебе ответил #484 , что невозможно произвести удержание без нажатия, невозможно непорочное зачатие - нет бога... как тебе ещё аргументировать?
а если добавить вторую кнопку, которая будет вызывать меню, которое управляется первой кнопкой... задача обойтись минимумом кнопок
первая кнопка будет не совсем кнопкой, а энкодером
а если добавить вторую кнопку, которая будет вызывать меню, которое управляется первой кнопкой... задача обойтись минимумом кнопок
сходи в гугл по запросу [arduino однокнопочное меню] и не морочь людям голову - тема о кнопках, а не об алгоритмах работы с кнопками
Клапауций 777... в гугл то схожу, вопрос только в том будет или не будет работать, подробности примеры не нужны, возможно или нет...если возможно то тогда преисполненный уверенностью пойду в гугл, если нет, то буду думать как все организовать по другому
про одну кнопку ты убедил что работать не будет, теперь 2 кнопки
про одну кнопку ты убедил что работать не будет, теперь 2 кнопки
теперь умножь моё(своё) убеждение на два.
Можно взять такую вещь, 74HC165 называется. Подключается на 3 провода и даёт возможность поставить 8 кнопок. А ещё можно их поставить много, допустим 5, и подключить уже 40 кнопок. На те же 3 провода.
а время удержания кнопки сравнивать можно? держишь кнопку 1 сек один алгоритм или программу, держишь 2секунды(1000<t<2000) то выполняется другой алгоритм?
std вопрос то не про увеличения количества кнопок, а какой будет минимум для определеннной задачи
там помимо кнопок будет много других приблуд скорее всего...а место огранченно, заполнять его одними только кнопками неохото..
melnibo, используя дискретную кнопку, Вы можете кодировать информацию тремя параметрами: длительностью нажатия, интервалом между нажатиями, количеством нажатий. Допускаются комбинации параметров. Например, два одиночных нажатия не равно одному двойному. Еще пример, короткие нажатия вызывают переход (по кругу) по пунктам меню. Длинное нажатие - вход в подпункт меню, а очень длинное нажатие - возврат на уровень вверх. Есть масса устройств, где одной кнопкой умудряются выделывать всякие коленца. Предельно неудобно. Во-первых, совершенно неочевидно, какая именно "морзянка" что будет означать. Об интуитивном использовании придется забыть. Во-вторых, длительность ввода команд. При любом использовании параметров, указанных выше, увеличение количества команд будет приводить к затратам времени на их ввод. Поскольку речь идет о человеке, то временнЫе интервалы он должен надежно отличать, а это кратно полусекундам в лучшем случае. Теперь представьте, что Вы ввели ошибочную команду или данные. Сколько времени и сил займет исправление.
ИТОГО: ищите приемлемый компромисс между минимизацией количества кнопок и удобством пользования. Как для себя найдете, так и делайте.
P.S. Собственно одной кнопкой можно сделать практически все. Манипуляция 0-1, на которой держаться все последовательные интерфейсы, это и есть работа одной кнопкой. По последовательному каналу сейчас вон кина гоняют. И самому можно кинцо перекинуть, только займет это сотню-другую лет, несколько рабочих династий "кнопочников" и несколько (или более) ЖД составов с кнопками с учетом их естественного износа. А в принципе... можно.
там помимо кнопок будет много других приблуд скорее всего...а место огранченно, заполнять его одними только кнопками неохото..
у меня меню для часов с одной кнопки, алгоритм:
1) удержание 3 сек - вход в редим програмирования
2) установка первого символа по кругу, через 5 сек после последнего нажатия прога переходит в установку второго символа
3) когда установлен последний символ, через 5 сек после последнего нажатия прога ждет команды на запись в часы
у меня очень просто, НО!!! можно еще реализовать длинное нажатие (как в 1) -ваыход в подменю и двойное нажатие - возврат. тут есть чего почитать, главное алгоритм придумать, а не заморочку...
Гриша ..ну вот на вашем прмере с часам можно же реализовать, чтоб одна кнопка управляла и одноцветного светодиода и RGB.. а можно глянуть ваш код часов?
Гриша ..ну вот на вашем прмере с часам можно же реализовать, чтоб одна кнопка управляла и одноцветного светодиода и RGB.. а можно глянуть ваш код часов?
можно, но код очень кривой я еще только учусь (это не последний вариант, его не могу найти, но это 100% работает)
UPD. нормальный код для кнопки описан в статье "класс титановый велосипед для тактовой кнопки" но и там идут обсуждения :) слишком много НО.
UPD. нормальный код для кнопки описан в статье "класс титановый велосипед для тактовой кнопки" но и там идут обсуждения :) слишком много НО.
ну, да... только все НО почему-то разбиваются о банальный здравый смысл.
*ну, я же просил, давать идеи или найти логические ошибки в алгоритме работы кода класса - я их не вижу, укажите мне на них и я их исправлю. к чему эти голословные заявления?
*ну, я же просил, давать идеи или найти логические ошибки в алгоритме работы кода класса - я их не вижу, укажите мне на них и я их исправлю. к чему эти голословные заявления?
Тут больше половины пользователей вообще не понимают элементарного :) чтобы что-то написать нужно ТЗ, а его составлять некому, вот и обсуждаем миражи (кому-то померещелось не разобравшись).
Может через год... код переварится и обкатается - тогда и будт предложения, а пока, лично мне, добавить нечего... а топики друг-друга неплохо дополняют ИМХО
Начал читать - пока интересно и поучительно. Единственное - бросилось в глаза обилие орфографических ошибок с "Ь" ("что делать", "что делает"). Тема очень популярная, но легко устраняемая. Если автору лень, могу сделать коррекцию. Негоже серьёзный труд портить детскими ошибками.
Относительно примера 2 приложения Г.
Как неоднократно было указано на этом ресурсе, конструкция
навсегда снимает вопрос о переполнении таймера
ВладимирТ, за предложение спасибо, только данной работе уже более 5 лет, на мой взгляд, делать корректуру имеет смысл только при подготовке новой версии, а таковой не планируется. По замечаниям и предложениям форумчан была выпущена версия 2.0 (ссылка на скачивание есть в теме). Там есть дополнения, исправления и новые неточности. :)) Но за это время все они были неоднократно обсуждены, поэтому в выпуске новой версии я смысла не вижу.
Относительно примера 2 приложения Г.
Как неоднократно было указано на этом ресурсе, конструкция
навсегда снимает вопрос о переполнении таймера
В первом абзаце параграфа "Delay() must die!" я честно признаюсь, что примеры из приложения "Г" я взял "как есть" с ресурса "Arduino UNO урок 3 - Тайминг http://cxem.net/arduino/arduino5.php" (N 14 в списке литературы). Мне так было удобней. Быстро проиллюстрировать сам подход. В последствии это вызвало некоторые нарекания со стороны старожилов форума. Соглашусь, но корректировать текст сейчас смысла не вижу. Вопрос, действительно, решён давным давно.