Программирование на Python «для тупых» 011.1 блок схемы

Поучимся составлять и читать блок-схемы в удобной бесплатной программе yEd Graph Editor
00:00 Введение
01:40 Первый пример
08:25 Пример с else
15:53 Пример с elif
Ссылочки на меня:
@vrom1990

Поучимся составлять и читать блок-схемы в удобной бесплатной программе yEd Graph Editor
00:00 Введение
01:40 Первый пример
08:25 Пример с else
15:53 Пример с elif
Ссылочки на меня:
@vrom1990

00:00 Вступление
00:48 1 задание
03:30 2 задание
07:25 3 задание
11:00 4 задание
12:06 5 задание
14:33 6 задание
15:40 7 задание
16:50 8 задание
И да! Мне тут подключили донаты на Пикабу. Мелочь — а приятно

Ссылочки на меня:
Мужчина 32 года
— Я работаю геймдизайнером, наверное, уже лет семь как, - начал он, сняв очки и положив их в футляр. – Начинал в маленькой студии в Новосибирске, потом перебрался в Москву, там еще пару лет проработал и, наконец, добрался до Питера.
— Вы делаете компьютерные игры, насколько я понимаю, - спросила я, внимательно рассматривая татуировку в виде змеи у него на предплечье. – Какие?
— Разные: от с казуальных мобилочек до более крупных проектов под PC, - отозвался Александр и, заметив мой интерес, добавил. – Это я сделал на спор – проиграл, когда игра, в которую я верил, с треском провалилась.
— И многие из ваших игр не стали популярными?
— Многие, но в мобильном геймдеве – это нормально. Мы каждые две недели штамповали очередную поделку. Какие-то заходят, какие-то нет, - хмыкнул мужчина. – Правда, сейчас я по-другому отношусь к текущему проекту – провал недопустим. Собственно говоря, с ним и связана моя проблема.
— Слушаю вас.
— Создание игр – это коллективное творчество. Конечно, бывают умельцы, способные годами что-то создавать в одиночку, но такое случается не так уж и часто, плюс многие из таких работ не взлетают… Моя задача, как геймдизайнера и, по совместительству, руководителя проекта – наладить командную работу, научить людей взаимодействовать друг с другом и следить за тем, чтобы задачи выполнялись так, как я их вижу. Но чем серьезнее проект, тем сложнее требования к нему, больше трудится людей, и соответственно выполнять свою работу мне становится труднее. И если раньше я как-то с этим справлялся, то сейчас чувствую, что уже не тяну.
— В чем, по-вашему, проблема? В коммуникациях с людьми, в тяжести принятия решения или еще в чем-то?
— Я пытался анализировать, но складывается ощущения будто проблемы лежат повсюду. Начнем с художников – раньше, когда мне приходилось работать с более-менее простой 2D графикой, я мог на пальцах объяснить специалисту что я от него хочу, ну или в крайнем случае взять карандаш и грубо набросать что имею ввиду, то теперь, когда у нас повсюду крутые высокополигональные модели – это дается с ужасным трудом. Причем плохо не только мне, но и людям, которые эту работу выполняют – им приходится выслушивать мои слова и вносить правки по нескольку раз за неделю. Это кого угодно может довести, а самое меньшее чего мне бы хотелось достичь – это получить с десяток выгоревших дотла художников.
— С кем еще у вас проблемы?
— Да со всеми – с программистами, например. Я им говорю какую фичу хочу иметь в данной сцене. Они такие: «Окей, глянем, что там можно сделать», - проходит два дня и они смотрят на меня как баран на новые ворота, и это при том, что у нас стоит система отслеживания задач, есть Эджайл-спринты и прочая фигня. Тут или они тупые, или я не очень, либо это вообще - сознательный саботаж. Дело в том, что я совсем недавно пришел в коллектив на смену человеку, с которым они достаточно долго проработали вместе и еще не успел со всеми сблизиться. Собственно говоря, вот так у меня появилась еще и мания преследования – говорю с сотрудником, а сам думаю о том, что он меня точно подведет.
— Вы пытались как-то наладить работу, говорили с коллегами? Может быть, у них есть мнение на этот счет?
— Говорил, они все, как один, отвечают то же самое – что во время созвона они все вроде как понимают, но стоит только уйти, как задачи становятся какими-то непонятными и несвязными. Ей богу, это звучит так, будто они все дружно накуриваются чем-то, разговаривают, а потом возвращаются по рабочим местам и забывают все что произошло.
— Вы сказали созвоны - это значит, что вы работаете на удаленке?
— Тут так принято - года, наверное, с семнадцатого. Мне, если честно, так работать не очень привычно – нет ничего лучше, чем старое-доброе совещание с доской и стикерами, когда можно дружно побрейнштормить, а потом донести мысль до всех сразу. Но и у удаленки есть свои преимущества – люди чаще выдают интересные мысли, просто потому что находятся в зоне комфорта, плюс, что очень нравится начальству – частенько перерабатывают.
— То есть сотрудники сидят у себя дома, слушают вас, получают задачи, а потом, все вместе, не могут по ним работать? Я правильно поняла?
— В точку! – едва заметно усмехнулся он. – Не все, конечно, и не сто процентов времени, но все же. Проект погрузился в самый настоящий производственный ад, причем так было еще при моем предшественнике. Он потому и ушел, точнее его вежливо попросили, что дело совсем застопорилось – хозяева полагали будто мое появление сможет исправить ситуацию. И самое интересное – в начале все было на мази, задачи исполнялись влет, идеи появлялись и претворялись в жизнь, а спустя пару месяцев мы начали все глубже и глубже проваливаться в болото. Такими темпами мне тоже недолго останется там работать… Как думаете - вы сможете помочь мне?

сегодня в 20:00 МСК стрим!
00:00 Введение
00:58 Задача про время года по месяцу
15:40 Калькулятор
20:04 Третий пример
23:06 Итоги
24:30 Интерактив
25:00 Домашнее задание
31:14 Аанонс следующей темы
Ссылочки на меня:
@vrom1990
Люди! Я тот учитель, которого недавно Ytyt.pukabu разгромил и, пусть не сразу, вернул на истинный путь преподавания программирования — пусть и не сразу, но я понял, что должен преподавать нормально. Могу в своё оправдание сказать только, что меня околдовали злые силы. Освободившись, я решил приобщиться к величию и посмотреть курс от Ytyt, тем более, что начало там бесплатное.
И вот я заметил, что кто-то явно пытается вставить палки в колёса этому замечательному начинанию, портя его платный курс, исправляя правильные и нормальные материалы. Я посмотрел только бесплатную часть, но и там уже проблем хватает.
Итак, как учил нас Ytyt, нужно учить сразу нормально. То есть так, как будет писать профессиональный программист, не приучая к неверным паттернам. И что же мы видим?
https://ytyt.ru/course/1/12/26/5


Ужас! Во-первых, кто-то устроил здесь дублирование кода — кто изучает хотя бы пару месяцев Python, знает, что вместо второго if и выражения в каждом случае надо писать else. Кроме того, любой программист вам скажет, что использование глобальных переменных — это очень плохо, нельзя их использовать. Здесь же используются именно глобальные переменные! Кто-то взял и исправил нормальный код, который там был, какой-то такой:

Причём проблема с использованием глобальных переменных не только здесь — да практически везде в курсе всё переделано с использованием глобальных переменных!
Но и это не всё, есть и другие проблемы, например, здесь https://ytyt.ru/course/1/1/1/42 нарушен тот самый принцип DRY который гласит, что не нужно повторять код:

Ужас, код повторяется да так сильно, сильнее, чем даже это было у меня! И это Кто-то исправил нормальный и правильный код на это. Кто новичок, там было как-то так

хотя есть и другие способы написать без повторений, может, там было что-то более профессиональное, тут я не скажу.
Кроме нарушения важных программистских принципов, кто-то из команды или коварный хакер явно аккуратно и хитро переписал местами текст, испортив его, например https://ytyt.ru/course/1/1/2/448 :

Видите? Кто-то заменил нормальное «но при этом их значение [переменных] не изменяется» или так, что изменяются переменные. Удар направлен на формирование правильного словаря, кто-то хочет приучить учеников ещё и терминологию неправильно использовать. Ещё и пробел после запятой убрал. И тире на дефис заменил. Такого хватает и в остальном ознакомительном материале.
Поэтому что я призываю? Пишите все Ytyt.Pikabu, регистрируйтесь на курс https://ytyt.ru/ и просматривайте весь материал, пишите в комментариях, что ещё натворил коварный лазутчик. Давайте максимально поможем обезвредить его и не допустить диверсию!

Враги проникли и на многие другие ресурсы, покусились и на святая святых. PEP8 — кто-то написал в этом тексте (и многих других), что это не незыблемые правила, а всего лишь соглашения, рекомендации, написал, что не всегда им нужно следовать, и даже привёл примеры случаев, когда следовать не нужно! Люди, нам нужно скооперироваться и вместе отстоять эти важные незыблемые правила.
Кто может, пожалуйста, так же помогите нести свет истинного знания другим — например тут вроде бы уважаемый человек, преподаватель кафедры информатики МФТИ, эксперт ЕГЭ, тоже приучает глобальные переменные использовать
Призываю всех зайти в комментарии к этому видео и написать Тимофею Хирьянову, что он не прав, указать на его ошибку и указать всем желающим на Ytyt.pikabu как светоч истинного знания
Простите, что сам так мало перечислил, к сожалению, пишу впопыхах, ведь враги нормального программирования уже стучатся в мою дверь. Кажется, вот-вот они прорвутся ко мне. Но ничего, главное, вы держитесь и во что бы то ни ста

Теперь давайте серьёзно. Знаете, есть такие люди, которые очень вредят и неопытным программистам, и IT в частности. Они очень упрощают такое большое и сложное явление. Они возводят в абсолют и ранг незыблимого правила, вещи, которые являются договорённостями или рекомендациями и далеко не всегда соблюдаются, принципы, подходы, которые не везде и не всегда уместны. Они заявляют, что то, что является недостижимым идеалом, стремление к которому и правда повышает качество и эффективность проектов, в реальной работе является нормой. И всячески это насаждают.
А людям хочется такой определённости, и они ведутся на это, и потом на практике очень страдают от того, что в реальном проекте от какого-то принципа или «правила» отходят и их, таких знающих всё, тоже заставляют идти вопреки этому правильному и единственно верному. «Забудьте всё, чему вас учили в вузе» — проблема оттуда же родом. И приходит разочарование,
Программирование обширно и прекрасно. Одну и ту же задачу можно решить разными способами. И бывает то, что работает, и то, что не работает, то, что эффективно и неэффективно, эффективно на короткой дистанции и неэффективно на длинной и т.д. и т.п. И в разных условиях и разных контекстах всё по разному. Образование — такая же область. С иным учеником, чтобы добиться успеха и понимания, придётся идти вразрез со всем, чему тебя учили.
@YtYt.Pikabu , хватит вредить людям и IT, хватит упрощать и сбивать людей с толку, рассказывайте всё как есть и учите, как на самом деле будет!
То ли дело у меня, я показываю всё, разные способы, а потом уже объясняю, какие когда могут быть эффективны или нет. Все срочно подписывайтесь на меня, пересылайте мне денег на карту 4949 4949 4949 4949 или по номеру 8-800-555-35-35
(все же поняли, что это липовые данные, не? :-) А то я уже ни в чём не уверен)

Пришёл человек, посмотрел, нашёл кучу вещей, к которым можно придраться. И раздул из этого какой-то ужас вселенских масштабов с приплетанием каких-то судеб и мотиваций и т.д. и т.п., жутко всё упрощая. Я и признал. Есть у меня косяки. И у него есть. И у меня и у него в курсах можно найти косячки, огрехи, вещи спорные, которые обычно не практикуются. Я удивился, давно же посматриваю его деятельность — должен вроде бы понимать такие вещи. Попробовал по-нормальному пообщаться, признал часть недочётов. С частью не согласился, попытался объяснить свою позицию, объяснил, из чего она выросла. Со многими критиками это получалось — и они признавали, что да, они не сразу въехали в специфику и какие-то вещи лучше оставить, как есть, с какими-то продолжали не соглашаться.
Пока не один критик не убедил меня прямо перезаписать видео — потому что я сам несколько видео брал и перезаписывал, не выпуская. Или удалял в тот же день и перезаписывал, если считал, что совсем проблемно.
Но Ytyt.Pikabu пришёл не понимать и разбираться — пришёл самоутверждаться, валить нечисть паладинским молотом. Наверное, надо было вот так ответить, как выше, и в таком духе весело проводить время — но не до того было.
Если серьёзно про курс ytyt.ru , а именно бесплатную его часть — да выглядит как нормальный курс, и над ним действительно поработали. И над сайтом тоже. Естественно, косяки есть и есть к чему придраться, в такой области всегда есть, к чему придраться, согласно какому-то подходу, принципу и т.д. Но на мой взгляд — в основном это безвредные мелочи что у него, что у меня, не смертельные. Есть спорные вещи, но они оправданы контекстом.
Смущает бесплатная вводная часть некоторой типичностью/классичностью на фоне некоторых заявлений автора. Всё довольно стандартно, везде сначала через глобальные переменные учат, если курс посвящён языку, на котором так можно. Но почему бы и нет, с другой стороны, классика свою надёжность уже доказала. Есть какие-то небольшие отхождения, некоторые похожи на мои в моём курсе :-). Они странно выглядят уже на фоне этой классичности, но — но почему бы и не так? Всё равно должно быть понятно.
Я не увидел большого количества практики — задачек можно было бы и побольше, на мой взгляд, многим этого объёма маловато, но, с другой стороны, это может и отсекать лишнюю аудиторию. Теории в начале много, полотна и я бы, если бы прямо вот платный курс делал, чаще бы практические штуки вставлял, не задания так демонстрацию. Как это на Pythontutor сделано
Список раздела платной части курса — адекватный, целостный, то, что нужно backend-разработчику.
Ещё многим посетителям сайта наверняка хотелось бы задать такой вопрос — «А вы кто?». Ну то есть что Тимур, что остальные какое отношение имеют к промышленной разработке? Где они программировали профессионально и что? Этого почему-то на ресурсе нет, хотя вроде как подразумевается, что это курс от профессионала(ов) для подготовки профессионала (под ключ). Вот вы сами сайт, платформу разработали — кажется, для лучшей убедительности как-то сделать акцент на этом. «Мы профессионалы в разработке сложных сайтов, вот сделали этот сайт с нуля (или на Django там), регистрируйтесь и знакомьтесь. До этого работали в таких компаниях над такими проектами. А вот репозитории наших проектов под открытыми лицензиями на Github». Да, это частично есть на Pikabu, растворено в постах, но и на сайте неплохо бы, чтоб было коротко и ясно.
На самом деле, успешность определяется количеством и качеством практики и тем, как будет строиться взаимодействие между будущими учениками и преподавателями. Многое зависит и от преподавателя и ученика. Как отвечают на сайте на вопросы, я не стал проверять — потому что это был бы отдельный кейс и статистику бы никакую не дал.
Так что вердикт по курсу — рекомендовать горячо не стану, тем более платный. Но если вы серьёзно нацелены стать профессионалом — попробуйте бесплатную часть. Если будет получаться, если объяснять будут понятно на старте, если убедят в своём профессионализме как программистском, так и преподавательском, если есть такие деньги и готовность трудиться — почему нет? Учиться быть профессионалом лучше у профессионала.

00:00 Вступление
00:13 1 задача
02:02 2 задача
03:30 3 задача
06:46 4 задача
08:16 5 задача
12:34 Завершение
Ссылочки на меня:
@vrom1990

00:00 Введение
00:15 1 задание
04:53 2 задание
18:36 3 задание
27:15 4 задание
30:15 5 задание
Ссылочки на меня:
@vrom1990

Сегодня берёмся за логические операторы, обозначающие операции «и», «или», «не»
00:00 Введение
01:43 Проблема: два условия одновременно
02:09 Оператор and (и)
07:17 Сокращать and нельзя
09:14 Оператор or (или)
13:40 Цепочки из or, and
18:43 Приоритет логических операторов
20:00 Пример на приоритет операторов
22:38 Другой пример на приоритет
29:36 Оператор not (не)
32:28 Итоги
34:09 ДЗ
38:05 Как решать ДЗ по-разному (данные логического типа в переменную)
40:39 Послесловие
Ссылочки на меня:
@vrom1990

Как делиться кодом на в комментариях на сайтах, если плывёт форматирование или код не влазит в сайт, а файл прикреплять нельзя? Используйте сервисы для публикации кода!
Что-то с YouTube вставляться не хочет, ошибку выдаёт. Так что вставлю с ВК, но на Youtube так же есть https://youtu.be/9EKUjKoVpEI
Проверяем домашнее задание по переводу данных из типа «целое число» или «вещественное число» в тип «строка» с помощью функции str()
00:00 Вступление
00:27 1 задание
06:07 2 задание
09:53 3 задание
12:50 4 задание
14:53 5 задание
19:17 Финал

Мы научились преобразовывать строку (текст) в число, теперь научимся делать обратное, чтобы полностью управлять выводом
00:00 Приветствие и новости
01:43 Пример с проблемой
05:00 Функция str()
12:35 Другой пример
20:25 Необязательный бонус
25:16 ДЗ
30:30 Анонс следующей темы
Ссылочки на меня:
@vrom1990
Итак, какие новости. Курс «Программирование на Python „для тупых“» загружен
- в Телеграм https://t.me/vrom1990pb
- в Яндекс.Дзен https://zen.yandex.ru/vrom1990
- во ВКонтакте https://vk.com/vrom1990pb
- на вебархив https://archive.org/details/python-tupyh
Лицензию везде, где можно, выставил на CC BY 4.0. То есть бесплатно, можно хоть скачивать (ну на вебархив только загружайте), нарезать на болванки и продавать, если при этом моё авторство указывается, вы не ограничиваете права других на курс и вы не заявляете, что я лично поддерживаю вас в ваших действиях (если я этого не делал).
Подписывайтесь где хотите, комментарии пишите где хотите. Буду выкладывать везде.
Кто хочет материально поддержать меня, тот может подписаться на Яндекс.Дзен и читать и лайкать там, так как за это я получаю небольшие выплаты. Либо разово отправить деньги на виртуальный счёт, я завёл виртуальный кошелёк+карту.
Про стримы написало только два человека пока, думаю на следующей или послеследующей неделе попробую один анонсировать так, но не ожидаю, что особо кто-то будет

Объясняю «для тупых» переменные — способ быстро объяснить Python, как запомнить что-то и потом использовать
0:00 Приветствие и благодарности
0:55 Что было на прошлом занятии
2:25 Про запоминание и память компьютера
6:41 Создаём переменную в консоли
9:25 Про имена переменных
10:45 Создаём и используем переменную в коде
15:30 Как записать в переменную ответ на вопрос
18:45 Комбинируем переменные с простым текстом
23:36 Соединяем просто текст и текст из переменной плюсом
35:48 Итоги
37:45 Домашка
Наверное любой кто занимался "умнизацией" своего жилища, задумывался или даже сделал "умный" домофон, а точнее своё абонентское устройство координатного домофона в квартире. Я не стал исключением и тоже решил сделать своё.
Почему своё, а не уже придуманное кем-то? Всё потому что: 1. Идеи заложенные в уже придуманные немного не входили в мои планы, и не все функции реализованы. 2. Как-то колхозно всё реализовано и с большими вопросами к элементной базе и габаритам устройств.
Итак, чего же тебе не хватает, сабака? - Все придуманные варианты, которые я смог найти в этих ваших интернетах:
1. Наследовали принцип - разобрать трубку, перерезать дорожки, подпаяться к контактам и прочие непотребства нацеленные на порчу абонентского устройства.
2. Использовали куеву тучу реле и/или оптопар.
Тоесть: Берём несколько реле и подпаиваем их выходы к геркону - для эмуляции снятия трубки, к кнопке - для открытия, еще реле к линии зачем-нибудь. Оптопару на линию для детекции (это понятно), и прочее прочее... Фу так делать. Схема получается хоть и простая, но габаритная.
3. Никто не реализовал передачу аудио сигнала на блок вызова.
В связи с этим, мои требования были такие:
1. Устройство (печатная плата) должна влезать в обычную монтажную телефонную коробку. Это значит что сразу готовый корпус, а также подключение линии и телефона можно выполнить нормальным способом, а не так как "было" - на соплях примотали толстую медную лапшу на тонкую многожилку провода трубки. Провод трубки обжимается разъемом RJ11, вставляется в розетку девайса, а там нормально клеммами прижимается к плате.
2. Передача аудио сигнала на блок вызова.
3. Минимально возможное использование релюх или оптопар.
Поставив цель стало ясно, что раз я не хочу ломать трубку, а так же передавать аудио сигнал и управление открытием, надо делать её полный эквивалент.
Начинаю шуршать схемы трубок. И после детального изучения принципов работы, что и за что отвечает - делаю вывод: Все схемы трубок координатных домофонов идентичны где-то на 90% как бы по разному из не рисовали. Беру за основу ту. которая мне показалась наиболее удобна для понимания.

И начинаем в ней разбираться. Геркон не надо, Динамик не надо, значит "схему его обвязки" тоже не надо. Резисторы 100-ки не надо, тумблер тоже.
Кнопка открытия... Зачем там люди реле ставят?... транзистор же нужен.
Микрофон... Как подать сигнал. Да просто. Микрофон электретный, а значит это по сути транзистор. Вот и поставим туда транзистор, только через 10 кОм, что бы сигнал по громкости не завалило. Немного поколдовав схему в ИзиИдея получаем:

Далее, детектор линии. Тут без оптопары не обойтись. Ну на схеме трубки есть диод индикации через 10кОм, делаем аналогично. Вход на светодиод, Выход на ногу ESP.
Теперь, как ни крути, но одно реле понадобится. Задача которого состоит в том, чтобы в выключенном состоянии коммутировалась на линию трубка, а во включенном наша схема. Я долго пытался найти решение как тут отказаться от реле, но всё сходилось к тому, что если нет питания, никакой коммутации не будет, т.е. если устройство по какой-либо причине не запитано, то домофон вообще не работает. Эх ладно, пусть будет одно реле =( к счастью нашлась одна миниатюрная релюшка от OMRON.
Теперь задача самая весёлая. развести всё это хозяйство и нужные габариты. Очень маленькие габариты. Разводим, заказываем, паяем, получаем:


Моя система умного дома - это HomeAssistant. Значит писать будем под ESPHome. (MQTT-шники, лишний брокер - это ваш выбор. Мой выбор ESPHome).
Всё бы было хорошо, если бы ни два НО:
1. Хоть маленькая заметка о том как воспроизвести звук на ESPHome используя библиотеку ESP8266Audio и есть, но она не работает, а точнее, там много не описано и досказано. Пришлось додумывать самому.
2. Ни одной статьи как использовать LittleFS в ESPHome нет. Пришлось всё решать самому.
Как итог:
Прошивка написана, всё работает как и положено.
В HomeAsistant карточка выглядит так:

А поскольку у меня имеется аж 2 Алиса-станции мини, и они умеют взаимодействовать с этой системой, то и домофоном теперь можно управлять голосом.
Ссылка на прошивку: https://github.com/SCratORS/SmartIntercom
Если у Вас тоже есть вопросы как работать с LittleFS и воспроизводить из нее Аудио файлы в ESPHome - Это для Вас.
Ссылка на схему: https://easyeda.com/scrators/intercom
Спасибо за внимание. Надеюсь кому-нибудь пригодится

Здравствуйте, вопрос к профессионалам и сведующим людям. Дочь 9 лет, интересуется компами, информатикой и программированием, подскажите пожалуйста, с чего лучше начать ребенку, покурил гугл, сейчас ей устанавливаю Scratch, стоит ли? Сам в детстве дальше Бейсика и Фортрана не ушел, но это ж уже не актуально. Прошу камнями не кидать.
Доброго времени суток!
Да, может уже надоело по ШИМ, но я хочу закончить этот ШИМ для себя и оставить немного полезностей.
В первой части программного ШИМа, уважаемый @Begemot911 подкинул одну занимательную статейку (если интересно - ссылку найдете там же), а именно про то, что analogWrite довольно медленный в силу своей универсальности, и для того что бы его ускорить, нужно просто ручками вписать в нужный таймер в нужный регистр сравнения значение скважности (в таймер, или подключить вывод нужного таймера, - не знаю как это правильно сказать). Да, это действительно ускоряет результат, но нужно знать какой таймер, какой регистр, какой бит порта, и пока analogWrite все это определит и получается задержка.
Так же в статейке написано как "подключить таймер", и как "записать значение в регистр", по сути это просто скопировано из исходника.
Я тут же решил проверить, как это работает в реалиях,.. и да... это работает, если все нужные данные известны. И вот мне пришла в голову мысль, - а если написать заранее все функции записи в каждый таймер/регистр, и запилить их указатели в один массив. Казалось бы затея простая, но гугл сказал - "давай ты сам", возможно, я гуглить разучился.
Спустя полчаса-час мучений и баданий с Arduino IDE, его компилятор сказал, что он понял чего я хочу, и скомпилировал код.
Что получилось на практике - Если записать сначала скважность хотя бы 1, то потом, записав 0 - на выходе все-равно есть сигнал. Вообщем перед записью значений 0 и 255 надо бы еще и ШИМ выключить (в статейке про это сказано, что типа нефиг писать 0 и 255) - да, логично, но я чот подумал что если в порт на этот пин записать 0 или 1, то ШИМ сам отключится - *индейская народная изба*. Ладно, берем все необходимое, и пишем код:

Взять код можно на github.com
Как работает котэ:
Дефайны - просто определяют cbi и sbi, ничего интересно, все это знают.
Есть 6 функций, каждая и которых отвечает за свой пин (3, 5, 6, 9, 10, 11), по порядку. Алгоритм функции таков: сначала порт переводится в режим OUTPUT, затем, если задаваемое значение скважности 0 или 255, то отключается режим ШИМ, и в порт пина записывается 0 или 1, иначе, включается ШИМ на нужное значение скважности. В общем и целом, вся логика сделана такая же как и у analogWrite, только без всех проверок и прочих определений, все только по факту.
Далее определяем массив из указателей на эти функции. Делается это так:
void ( * название_массива_функции[])(типы_условных_параметров) = {&название_функции_1, &название_функции_2 ... и т.д.}
Как я понял, можно использовать функции с разными параметрами, но тут я не нашёл ответа как, понял только, что если будет функция без параметров в массиве функций с параметрами, то ничего страшного, а вот если разное количество параметров, разного типа - то ответа я не нашёл.
Конечно же, если у вас не Nano, а что-то более жирное, то можно добавить свои функции
И получаем вот такую удобную конструкцию.
Например надо на все пины ШИМ, подать какие-либо значения скважности
Определяем значения скважности в массив
byte valueMass[]=;
и банальным FORэм передаем все значения в функции
for(byte i=0;i<6;i++) analogFastWrite[i](valueMass[i]);
Вот и всё!
Я думаю что существует способ обойтись без FOR и передать значения как-то напрямик, но я пока не нашёл как. Если кто знает, напишите в комментариях, очень требуется.
Наверняка кому-нибудь пригодится, если не вариация замены analogWrite, то пример как сделать массив из указателей на функции в Arduino IDE.
Доброго всем времени суток!
В связи с оглушительным успехом первой части аппаратного ШИМа, я решил, что не стоит останавливаться, и хочу поделиться еще одним вариантом реализации данного действа, но чуть более издевательского. А читая комментарии к первой части, я сделал для вывод, что не стоит пытаться реализовать код универсально, кому надо - тот сам все сделает под свои цели. Ну что же, так и поступим.
Да простит меня сообщество, - не вижу смысла заливать код куда либо, если там несколько строк:

Итак, котэ работает на 2 прерываниях, одно прерывание срабатывает при совпадении, другое при переполнении. Т.е. когда сработало прерывание по переполнению, а значит таймер обнулился, - на пин подается высокий уровень. Когда таймер досчитал до значения регистра сравнения - вызывается прерывание по совпадению, в котором на пин подается низкий уровень. И таймер продолжает считать дольше, пока не вызовет прерывание по переполнению. И так по кругу.
Пройдемся по алгоритму:
Допустим, хотим ШИМ на D13, смотрим табличку вначале... D13 - это первая таблица, она относится к PORTB и регистр настроек DDRB, В самой верхней шапке - управляющие биты, ПИНу D13 соответствует байт 32 (если так можно сказать), разложив его в бинарный код, будет 00100000 , это 6 бит,.. но нам надо записать в переменную bit число 32.
Далее, прописываем нужные порты и регистры.. т.е. в блоке setup - DDRB и в прерываниях таймеров прописываем порты PORTB.
Соответственно, если порты и регистры будут не B, а например на аналоговых пинах - это С, то пишем вместо DDRB - DDRC, вместо PORTB - PORTC.
Для более простой настройки, конечно же можно это все переопределить в define.
Для установления значения скважности, нужно значение скважности записать в регистр сравнения, в данном примере используется таймер 2, канал B, значит записываем OCR2B = 0-255. Максимально 255, т.к. таймер 2 - 8 битный. Нужно ли вызывать перед записью значений запрет прерываний cli(); и их разрешение sei(); после - каждый решает сам, от требований поставленной задачи.
Вот и всё.