Приветствую! Так уж получилось, что появился заказ на написание довольно сложной прошивки, с хотелками вида дальнейшей расширяемости, удобства сопровождения и т.д. и т.п. Короче, со всем тем, что в парадигму "напишу на честном С" (приветствую, коллега ) - если и вписывается, то с таким серьёзным скрипом, что ахтунг. Платформой выбрали Arduino Mega, чтоб - уж точно все хотелки, благо, изделие очень мелкосерийное. И, поскольку у меня уже накопился достаточно большой опыт разработки модульной архитектуры прошивки, решил я его применить и здесь, с учётом нюансов проекта. В аттаче - исходники, посмотрев которые, каждый может взять их за основу и убедиться, как при помощи штатных средств С++ можно легко сделать расширяемую событийно-статусную систему. Оговорюсь - то, что выложено - это не готовое решение, а лишь костяк для демонстрации того, как можно организовать опрос всех компонентов системы через определённые настраиваемые интервалы, как легко добавить поддержку любого типа датчика в систему, как при помощи событий передать событие всем подписчикам, заинтересованным в нём. Т.е. потенциал этого дела - не сказать, что огромен, но достаточен, чтобы покрыть 90% применений в той же робототехнике (да, угадали, пишу робота). Многого, конечно, ещё не реализовано, например, ещё продумываю понятие "статус системы" (возможно, надо будет веса статусов вводить, ещё чего-нибудь сейчас неочевидное и т.п.), ещё идут обдумки по механизму взаимодействия компонентов системы - работа только начата, собственно. Поэтому прошу воспринимать приложенное добро как справочный материал. Однако, тем не менее, рабочий - достаточно написать N модулей, которые можно связать между собой любыми типами событий - и система будет работать без единого delay и кучи кода в loop. Компилировал под версию IDE 1.6.7, код снабжён комментариями, в принципе - он простой, как тапок. Если кому будет полезен в плане обучения - буду рад. На вселенское знание и медаль "гуру" не претендую, лишь хочу поделиться опытом, при этом открыт для обоснованной критики Дальнейшие разработки этого добра выкладывать, к сожалению, не планирую - проект на заказ, со всеми втекающими и вытекающими. Начальный этап - ни на что не влияет, как показывает практика: всё равно потом много чего добавится/удалится/изменится. Всем спасибо за проявленный интерес.
А теперь осталось написать небольшой мануал для пользователя страниц на 100 и привести 10 примеров для использования. Сможите увлечь последователей, вы ведущий программист, задающий тон хотя бы в маленьком болоте. А если последователи потерялись, то каково бы не было ваше желание, толку от вашего проекта не будет. Кроме вас разумеется.
Тогда зачем выкладывать на форум, если не увлекать. Иногда пригодится разжовывать буквально понятные вещи, да так что и сам нет нет да разберешься основательно. Код (C++): анекдот Разговор 2-х преподавателей: - Ну и группа мне в этом году попалась тупая! - А что так? - Представляешь себе, объясняю теорему - не понимают! Объясняю второй раз - не понимают!! В третий раз объясняю. Сам уже понял. А они не понимают...
Так решайте. По крайней мере у меня свой путь. Если я чего-то не пойму, то точно я это не буду использовать. А если чего мне не хватает, то если я не найду, то придумаю. Так что вы мне ничего не должны, тем более это что то не обязаны выкладывать.
Спасибо за труд и публикацию, надо будет поковырять, может что то и заработает. ) Но в чем то и оппонента понять можно, вот так взять и утащить в свой проект без описания сложновато будет. Даже камменты в коде мало помогут. Нужно время чтобы понять и перенять принцип, но кто то лучше потратит это время на создание своего принципа и подхода.
Всегда полезно обмениваться опытом. Спс. Ну а халявщики и изобретатели велосипедов могут спокойно проходить мимо.
Сама идея отличная , пока автор присутствует на форуме хоть какая то обратная связь будет(надеюсь). И таких примеров бы побольше, без примеров все в разы труднее. Спасибо автору за труд и желание что то предоставить , поделиться опытом.
Спасибо. Посмотрим....., сейчас у меня как раз назрел "мониторинг инкубаторов", может чего полезного найду. ЗЫ с теплицей Вашей знаком.
Ещё недоделана Времени сейчас - ноль. Блин, там осталось допилить 1-Wire нормально, да SIM800 проверить, а всё никак.
Можно простой вопрос? Код (C++): // получаем интервал, прошедший с момента последнего вызова unsigned long curMillis = millis(); uint16_t interval = curMillis - timeVal; timeVal = curMillis; Почему и для чего 1 переменная объявлена как unsigned long, а 2 - uint16_t ?
Потому что ожидается, что интервал между двумя вызовами функции Update не будет больше, чем 65 секунд Т.е. таких тормозов в системе быть не должно