Цифровые автоматы в классах по qwone
- Войдите на сайт для отправки комментариев
Сб, 11/08/2018 - 19:49
Похоже надо открыть новую тему, что бы не смешавать скетчи со старой.
http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-ch...
И да как это не страно, но похоже мои скетчи с использованием цифровых автоматов и без использования будут отличаться друг от друга. Примитивные не совсем, а дальше по мере усложнения полезут и принципиальные отличия.
Ну начальный шаблон похож
Мигание светодиода с равными полупериодами тоже
ПС: Вот так тоже но запись получше
Мигание с различными полупериодами так же
Поправочка
А вот с появлением кнопок полезли принципиальные отличия. Вот управление с просто нажатием
Управление с коротким и длиным нажатием.
Ну пока все. Немного похоже на кнопки Клапы, но все же не они.
Квон, прошлая тем была свалкой неработающих кодов (я тебе в #270 прямо привёл пример на котором валится, но ты и не подумал поправить).
Решил ещё одну помойку для неработающего говнокода завести?
Хотя, я забыл, ты же там в посте #35 прямо сказал, что принципиально не исправляешь ошибок. Извини. Продолжай гадить.
Может раздел сразу завести на форуме: "Ардуино по qwone"... И ссылать туда всех борзых новичков. Навек.
Предлагаю использовать здесь новый термин : "квонокод"
Предлагаю использовать здесь новый термин : "квонокод"
Надо дать определение. Предлагаю такое:
"Квонокод - разновидность говнокода, написанного коллегой qwone. Отличительная особенность - широкое использование ключевого слова "class" при полном отсутствии объектно-ориентированного подхода".
Предлагаю использовать здесь новый термин : "квонокод"
Надо дать определение. Предлагаю такое:
"Квонокод - разновидность говнокода, написанного коллегой qwone. Отличительная особенность - широкое использование ключевого слова "class" при полном отсутствии объектно-ориентированного подхода".
Это оперделение требует корректировки:
"Квонокод - разновидность программ, написанных коллегой qwone. Отличительная особенность - широкое использование ключевого слова "class" при полном отсутствии объектно-ориентированного говнокода".
"
Теперь попробуем заменить аналоговую клавиатару на клавиатуру на Serial
ПС: Попозже я ее оптимизирую и переведу на PROGMEM
Ну где-то так
Искуство иллюзии в исполнении квона - навязчивая публичная демонстрация владения ООП и цифрового автомата при полном их отсутствии в коде.
Переделал меню отсюда #251 . Работает. Но надо ее еще обдумывать.
Теперь попробуем заменить аналоговую клавиатару на клавиатуру на Serial
Ну где-то так
Ни чё не понял .. а где там "конченный автомат"? Вы же не считаете, что раз обозвали метод run() и создали поле state то он сразу превратил класс в КА?
Я бы для начала, переформулировал задачу под решение методом конечных автоматов, а уже потом делал реализацию. Тут задача, вообще - какая?
Судя по тексту: есть 5 условных кнопок/команд: "влево", "вправо", "вверх", "вниз" и "выбор", принимаемых из Serial. По "нажатию кнопки" (приходу команды) выполнить свое действие. Где тут задача для КА? :)
Есть "общепринятое" понятие об КА как системе с конечным набором состояний. В этой задаче состояние одно: принять сигнал - сделать действие. Но если у Вас своя "концепция", то умолкаю..
Ну да, а кнопки или что-то еще подобное,по вашему, это система с бесконечным набором состояний. Кнопку , а точнее программную часть тоже можно называть автоматом. А то что она переключается под действием механических сигналов, а не электрических, то это пусть Вас не смущает. Вот переключаю светодиод через Serial кнопки. Похоже по-ходу сумел организовать систему собитий. Так что Logik попозже будет попу рвать, говоря что я организовал не событийные события.
qwone, у конченного автомата есть не только набор заданных состояний, но ещё и правила (граф) переходов промеж них, который в большинстве случаев может быть описан матрицей переходов, зачастую сильно вырожденной. А ещё есть "слушатель входных новостей", который и поставляет конечному автомату условия (события) по переходам этого графа. Триединство в одном флаконе.
Кнопку можно натянуть на конечный автомат, ибо как миниум 2 состояния у неё есть. Только стоит ли, кроме как "примера для"? :)
P.S. И мне кажется, что разумней не столько демонстрировать огромный код на классах (что сразу показывает проигрыш решения - стока писать лично мне - лениво), сколько попытаться показать КАК можно переформулировать "обыкновенное ТЗ" в постановку под КА.
Как пример: "светофор имеет 3 лампочки, которые загораются по порядку и горят 30сек - красный, 2сек - желтый и 30сек - зеленый". Можно решать с delay(), но можно переформулировать задачу:
"Светофор может находится в трех состояниях: 30сек. включен красный, 2сек включен желтый и 30сек включен зеленый. Изменением состояний управляет системное время millis(). Переходы между состояниями: выключить зеленый + включить красный, выключить красный + включить желтый, .."
Тут как видно, решение на delay() уже не возникает из самой постановки ТЗ. А "блин без делай" - так и сам просится как слушатель потока новостей и программа вырождается в тривиальную даже для начинающего школьника. :)
P.P.S. правильная постановка задачи - 50% решения.
Архат, не святотацтвуй (с его точки зрения), ты же виишь, Пуха перекрестили, теперь он послушник Секты Свидетелей Всемогущества Святого Конечного Автомата. Вот пусь пока живет в счастливом неведении, главное, чтоб квартиру на них не переписал.
Так сам вроде как в этой секте .. думаю в ней "раскол" не нужен.. :)
Преподавал по лету КА детишкам, оказалось что переформулировка задачи (как выше) приводит к существенно лучшему восприятию и построению алгоритмов и внезапно, оказывается: -"Вы им (12лет) преподаете конечные автоматы? Это же очень сложно!" .. совсем не так, а очень даже просто и им понятней чем как преодолеть delay() в коде.
У qwone, КМК, есть небольшое недопонимание КА: кроме состояний, есть граф переходов и именно он реализует "методы переходов", а слушатель новостей всего лишь .. поставляет новость о переходе или .. не поставляет (ничего не происходит - состояние неизменно).
Отсюда: класс КА должен содержать не только переменную state, но и иметь МЕТОДЫ переходов (возможно и матрицу переходов) а также СЛУШАТЕЛЯ новостей. Далее сюда в С++ настырно просится "базовый" класс КА с виртуальными наследуемыми методами .. а это есть безусловное зло для микроконтроллера с гарвардской архитектурой.
Отсюда: реализация на "С" базовых методов КА есть достаточное действо и скрипач (С++) тут не нужен. :)
Итак пусть нам надо такой Автомат
И скетч к нему.
Но полезная переменная внутри автомата - состояние совершенно бесполезна для устройств снаружи. Ну зачем нам знать в каком состоянии находится автомат. Нам важнее знать когда он перешел и сделать все обработчики этого события снаружи. Так что приходится вводить такую переменную событие.
Теперь появилась возможность писать куски кода отлаживать и формировать библиотеки уже готовых компонентов
Итак пусть нам надо такой Автомат
Допустим, ниже обобщение без КА, и с возможностью юзать любые интервалы между командами - например, подгружая следующую команды из файла макроописания, например, чтобы сделать алгоритм работы чего-либо - сменяемым, без перезакачки прошивки:
Виртуальные методы и наследование - спецом не вводил, но при желании и необходимости - оно можно.
Пух, я вот одного не пойму - к чему твои вырожденные примеры, к тому же такие, где мухи с котлетами в одном фарше? У тебя, например, переменная mill - глобальная, накохер? При том, что в одном классе аж две четырёхбайтовых переменных - накохер? В приведённом тобой выше примере КА - накохер сам КА, если его там - просто не надо, это тупой перебор интервалов, при этом весь интерес, что по истечению интервала просто выполняется другой кусок кода - накохер там КА? Кмк, ты сам уже запутался в КА и в посылах - зачем они нужны. Знаешь, это как купил молоток - и пока всё им не переколотишь - не остановишься, и похер - гвоздь торчит или шуруп - всё заколотим к ебенематери.
Чуть переписал скетч что выше. Теперь можно задавать время перескока в создании объекта.Косметическая доработка.
DIYMan, Вас зовут видно Потапов из Ералаша.https://www.youtube.com/watch?v=nZAvX2BvpPc
Разумеется я здесь на простых примерах раскладываю опять же простые концепции. Но я не мешаю Вам открыть свою тему и вести уже разговоры на сложные темы. Вот сколько вы открыли тем и что. Почему Вы лезите сюда, а не в Ваши темы. А знаю - ВЫ ЗДЕСЬ САМЫЙ УМНЫЙ.
О как, млять. Ещё один ЧСВ-шник у нас завёлся, робяты. Шо деется-то :) Да др@чи тут один, пжалста - кроме тебя твои никчёмные поделия никому не интересны, как видишь. А я так, забежал, грешным делом подумав - может, прислушается и уже наконец-то начнёт чему-то учиться, вместо плясок на месте? Ошибался, жестоко. Прощенья просим, барин.
Видел тут на сайте много разных классов, появился вопрос. Может я чего то непойму, но это ведь классы C++? Просто я ковырял GNU C reference manual, и под термином class я видел только классы памяти. Это ведь разные вещи?
semaawp, classы в Си это мощный инструмент. И да в этой теме используются классы причем на 2% . Я не вижу смысла выкладывать все про классы здесь . Это очень много, есть соответствующая литература, а и я не смогу достаточно все это приподнести. А если я начну объяснять здесь, то от форумчан будет ну очень много критики.
Основное отличие языка программирования С++ от С состоит в том, что в С нет классов, а следовательно язык С не поддерживает ООП, в отличие от С++.
Я вот это хотел узнать, но все равно спасибо
Скопипастить - это я еще могу, даже кое что поправить, а вот с нуля писать под классы, уже учиться видимо поздновато. Решил слелать автоматику для горелки на отработке самому. Понравились классы qwone , хоть гуру его склоняют тут как хотят, но главное они работают и занимают мало места.
Что хочется от ТС - чтобы помог переписать мой скетч под свои классы, может и восьмую атмегу влезет. Заранее спасибо.
Еще вентиляторы и насосы будут работать от шим, сам пытался под них класс написать, но почему - то не работает
IvanP, ваш код это конечно хорошо. Но лучше сначало познакомится с алгоритмом работы. Просто проводить обратный инженериг по коду не очень интересно и долго.
Blink
Возьмем код отсюда https://www.drive2.ru/b/2867939/ и перепишем как следует. Итак исходник
Честно - круто! А где Ваша программа? Или это задача на 100500 лет?
"Спрячем управление гусиницами в класс" и упростим управление ними
И теперь вчерне накидаем код. В работе пока не проверял
Отладил скетч. Теперь можно в сериал отправлять не только по одной команде а группу и танк будет отрабатывать их.
Попробую показать как писать Меню на ардуине (разумеется по моей методике). Итак переменные.
Переменные будут читаться с ЕЕPROM и меню туда записываться.
Добавим первичную разметку экранов в Меню - экран для оперативного отображения информации . Обновление раз в 1 секунду. И 4 экрана для редактирования переменных которые были упомянуты ранее. И да если долго находится на экране редактирования, то автоматический возврат на главный экран.
Добавим в меню кнопки.Пока две для переключения между экранами.
Добавим в Меню сенсоры. К примеру потенциометры на пины A0 и А1 для имитации работы внешних датчиков.
Добавим кнопку Select и режим редактирования 4 переменных в Меню
Теперь сделаем вывод на экран LCD1602 I2C . Кнопка Select на Главном экране вкл/выкл подсветку экрана