Несколько скетчей в ардуино
- Войдите на сайт для отправки комментариев
Пт, 09/02/2018 - 15:53
Набаловавшись с платой Ардуино УНО в разных самоделках -лента умных светодиодов, ходилка на сервоприводах, пищалка нот, перекручивая быстро плату с корпуса на корпус и перевтыкивая проводки задумался вот над чем: неудобно бегать и перезагружать разные скетчи каждый раз. Удобнее их просто переключать на плате, когда они все уже "внутри". Вроде ничего сложного нет, но найти описание построения подобных скетчей не смог. Если кто знает или делал на простом - светики, моторчики поделитесь нюансами реализации.
ПК - чем не пример? Начинайте с малого -внешний накопитель/память, ДОС, и т.д. Назад, в будущее!
Ну как бы на первый взгляд ничего сверхсложного - оформляете "отдельные скетчи" в виде функций (подпрограмм), ну и в зависимости от состояния какого-нибудь переключателя (например, опрашиваемого при старте в сетапе), работаете с нужной. Например, как-то так (условный код):
Если кто знает или делал на простом - светики, моторчики поделитесь нюансами реализации.
Проще всего эти модули реализовывать в отдельных функциях. Например в функции loop() программа определяет в каком положении переключатель, а оттуда передает управлению соответствующей функции. Правда, надо позаботиться, чтобы из этой функции управление регулярно возвращалось в loop() , чтоб не пропустить тот момент, когда положение переключателя изменилось.
Набаловавшись с платой Ардуино УНО в разных самоделках -лента умных светодиодов, ходилка на сервоприводах, пищалка нот, перекручивая быстро плату с корпуса на корпус и перевтыкивая проводки задумался вот над чем: неудобно бегать и перезагружать разные скетчи каждый раз.
Заливка модульного скетча не избавит вас от скучной и утомительной возьни с перетыканием платы из поделки в поделку, переподлючением приводов и тд. ИМХО, перезаливка скетча - лишь малая и самая простая часть. Поэтому чисто практический ответ на ваш вопрос - купите для каждой самоделки свою плату, они стоят сущие копейки - Ардуино Нано всего 110-120 рублей
Ну а если вопрос именно в заливке в плату одного универсального кода на все проекты - то вам уже дали несколько советов.
Правда, надо позаботиться, чтобы из этой функции управление регулярно возвращалось в loop() , чтоб не пропустить тот момент, когда положение переключателя изменилось.
Зачем? Не думаю, что ТС захочет перевтыкать ардуину из платы в плату не отключая питание.
Зачем? Не думаю, что ТС захочет перевтыкать ардуину из платы в плату не отключая питание.
Зачем перетыкивать? група пинов - на светодиодах, другая группа - на серве, и т.д. Пинов не хватает - взял Мегу. :)
Да, именно перепроверять состояние переключателя не надо. Достаточно одной исходной проверки его состояния. Только думал все модули-скетчи поместить в loop(), чтобы по условию if ограничивать их и "проигрывать до выключения питания" через goto.
С НАНО ещё не пробывал, с про мини - да, хороши когда один раз загрузил и всё. А так "отклеивать", отпаивать, переподключать к УНО, перепрошивать. С УНО ловчей, но дороговато.
С НАНО ещё не пробывал, с про мини - да, хороши когда один раз загрузил и всё. А так "отклеивать", отпаивать, переподключать к УНО, перепрошивать.
Зачем? 4 контакта с Mini Pro выводите и USB-TTL конвертор используете. Дел на 20 сек для перепрошивки.
Только думал все модули-скетчи поместить в loop(), чтобы по условию if ограничивать их и "проигрывать до выключения питания" через goto.
Не нужен там ни loop(), ни тем более goto. Смотрите мое первое сообщение - у каждой подпрограммы свой "сетап" и "луп", да там уже практически готовый шаблон.
Зачем? Не думаю, что ТС захочет перевтыкать ардуину из платы в плату не отключая питание.
Зачем перетыкивать? група пинов - на светодиодах, другая группа - на серве, и т.д. Пинов не хватает - взял Мегу. :)
Нет, коробочки то разные, питание разное - всё скопом не получится.
С НАНО ещё не пробывал
Нано - полный аналог уно, только компактней и дешевле.
надо было при встраивании МИНИ в свою плату вывести на отдельный штыревой разъем пины для заливки скетча. И ничего "отклеивать" и "отпаивать" не пришлось бы, кабель подключил и прошил, не сложнее Уно
Кстати насчет реализации переключателя: можно использовать два резистора, подключенные как делитель напряжения. Среднюю точку заводим на аналоговой пин (на всех устройствах его следует зарезервировать, чтобы использовался один и тот же). На каждом из устройств коэффициент делителя должен быть разным. Считывая напряжение с делителей, определяем, к какому из устройств подключена ардуина, и запускаем соответствующую программу. Например, считали значение от 100 до 200 - значит подключились к светодиодной моргалке, считали от 250 до 350 - к сервам, и т.д.
С НАНО что смущает... кроме МК там микросхема СН... с ней плата ( у меня ещё есть УНО подешевле с такой же CH...) долго грузится после включения питания.
Про шаблон готовый всё ясно кроме while (1). Как интерпритировать? Пока что???
всё ясно кроме while (1). Как интерпритировать? Пока что???
Вечный цикл. Т.е. работает точно так же, как и loop().
Перед while прописываем все то, что обычно пишем в setup() для "одиночной" программы - делаем начальную инициализацию и т.д., т.е. то, что должно выполниться один раз. А потом запускается while и крутится все, что внутри него, пока не выключим питание (или сброс).
Кстати насчет реализации переключателя: можно использовать два резистора, подключенные как делитель напряжения. Среднюю точку заводим на аналоговой пин (на всех устройствах его следует зарезервировать, чтобы использовался один и тот же). На каждом из устройств коэффициент делителя должен быть разным. Считывая напряжение с делителей, определяем, к какому из устройств подключена ардуина, и запускаем соответствующую программу. Например, считали значение от 100 до 200 - значит подключились к светодиодной моргалке, считали от 250 до 350 - к сервам, и т.д.
Это типа ключа? - вставили в разъём на 3 ячейки сборку из двух данных резисторов и проигрываем соответствующий скетч?
Это типа ключа? - вставили в разъём на 3 ячейки сборку из двух данных резисторов и проигрываем соответствующий скетч?
Типа да. Чтобы занимать только один пин и с минимумом навески. Один конец одного резистора на +, второго - на землю, место их соединения - на аналоговый пин.
Только зачем эту сборку ставить на разъем? Если устройство распаяно на плате, то на той же плате следует запаять и эту сборку.
Согласен, ключ - лишний элемент (в данном месте).
Что то вы сложное затеяли. Отладили на уне-нане, развели плату, распаяли, хоть МК голый с загрузчиком, хоть проминьку, вывели три вывода наружу и потратили полсотни рублей на USB-UART. Девайс всегда на боевом дежурстве, а захотели-перешили. ИМХО.
Что то вы сложное затеяли. Отладили на уне-нане, развели плату, распаяли, хоть МК голый с загрузчиком, хоть проминьку, вывели три вывода наружу и потратили полсотни рублей на USB-UART. Девайс всегда на боевом дежурстве, а захотели-перешили. ИМХО.
Да, наверное... Но на практике так - сделал, жалко УНО, закажу про мини, жду, поделку другую сделал, между старой и новой бегаю через "ищем скетч тот самый забытый и перепрошиваем", пришла мини - паяем разъёмы (шоб без лишнего), монтируем "на века". Через месяц пыления, модернизируем, опять через уно, допаиваем разъёмы на про мини и т.д. и т.п. Вот и зреет крамола в голове, бегать с многоскетчевой УНО и не рыть их по отдельности.
разъёмы на про мини и т.д. и т.п. Вот и зреет крамола в голове, бегать с многоскетчевой УНО и не рыть их по отдельности.
МК - это не бездонная бочка, ресурсы ограничены. Вы не сможете залить туда десяток скетчей и отдавать ProgMem space и RAM только активному.
Я себе просто сразу чипов десяток заказал и трачу потихоньку. Если обновить, то эмулятор на уне дома на столе, заработало, взял ноут, переходник и пошел перешил на месте. Ну а что бы разъемы не допаивать, это сразу надо ТЗ писать, а не по ходу придумывать. А если уж назрел такой апгрейд, наверно проще новую плату под тот же форм фактор развести. Да, и чипы паять проще чем проминьку. ИМХО.
Оно понятно, что лучше на каждое устройство свой контроллер и не париться. Но задумка ТС, считаю, не такая уж и наивная, и тоже имеет право на жизнь. Например, в целях демонстрации в процессе привлечения детей. Такие програмки занимают немного места и поместиться в памяти их может несколько легко. Имеем, например уно, обкатанный скетч и несколько самопальных шилдов. Поцепили один шилд - светомузыка, другой - пианина, третий - еще какая-то хрень и т.д. Быстро, удобно и без промежуточных перепрошивок.
Я себе просто сразу чипов десяток заказал и трачу потихоньку. Если обновить, то эмулятор на уне дома на столе, заработало, взял ноут, переходник и пошел перешил на месте. Ну а что бы разъемы не допаивать, это сразу надо ТЗ писать, а не по ходу придумывать. А если уж назрел такой апгрейд, наверно проще новую плату под тот же форм фактор развести. Да, и чипы паять проще чем проминьку. ИМХО.
Сейчас обхожусь без плат, уже лет пять не режу и не травлю кроме примитивных соединений - потому паять чипы будет тяжко.
Оно понятно, что лучше на каждое устройство свой контроллер и не париться. Но задумка ТС, считаю, не такая уж и наивная, и тоже имеет право на жизнь. Например, в целях демонстрации в процессе привлечения детей. Такие програмки занимают немного места и поместиться в памяти их может несколько легко. Имеем, например уно, обкатанный скетч и несколько самопальных шилдов. Поцепили один шилд - светомузыка, другой - пианина, третий - еще какая-то хрень и т.д. Быстро, удобно и без промежуточных перепрошивок.
А главное, развенчан миф - одна плата, одна поделка, один скетч ;)Но в моём случае, ещё плюс жадность:(
Сейчас обхожусь без плат, уже лет пять не режу и не травлю кроме примитивных соединений - потому паять чипы будет тяжко.
У меня почти двадцать лет перерыв был. А потом немного с ЛУТом помучался, лупу с подсветкой купил (руки с годами коротковаты стали), на станцию паяльную простенькую разорился и все гут, до 0603 вполне комфортно.
А главное, развенчан миф - одна плата, одна поделка, один скетч ;)
Ну, тут как-бы никаких мифов нет. Любое более менее сложное устройство занимается кучей всякой хрени. Например, описанный на этом сайте осциллограф совмещенный с генератором сигналов - два устройства, но в одном скетче и никаких мифов. А часы, например, куда только не лепят, как дополнительный функционал.
Очередной Мичурин. Дать стране
угляскетчи , много номелкогобестолковых. И все на одной плате.А главное, развенчан миф - одна плата, одна поделка, один скетч ;)
Ну, тут как-бы никаких мифов нет. Любое более менее сложное устройство занимается кучей всякой хрени. Например, описанный на этом сайте осциллограф совмещенный с генератором сигналов - два устройства, но в одном скетче и никаких мифов. А часы, например, куда только не лепят, как дополнительный функционал.
Это я согласен, но гораздо "эффектнее на публике" если одна плата сразу и по очереди и в часах на светодиодных матрицах и в часах на сервах и в часах на микроамперметрах ;)
Но, изначально, всё равно жадность мною движет...
Очередной Мичурин. Дать стране
угляскетчи , много номелкогобестолковых. И все на одной плате.А Мичурин жадный был?.. Да ничего тут бестолкового нет, соединив два, три скетча, будет одна платка пылится на две-три поделки - вот и усё!
Вы хотете сделать цирковой номер. То это да надо работать на публику.
Совместите холодильник и унитаз . Компактно и места много в квартире образовалось. Вот только жрать с унитаза и гадить в холодильник почему-то желающих нет.
ПС: Посмотрите кругом- компьютер планшетник самртфон - совмещают функции , а не скетчи. Потому что если совместить только скетчи , то как минимум надо перезапускать. А в вашем снимать плату с одного и вешить на другое. Так грохнуть плату еще вернее.
Я глупый, вы умный и что дальше?
Да ладно, чего набросились то? Если человеку хочется и нравится, то пускай экспериментирует себе на здоровье.
ПС: Посмотрите кругом- компьютер планшетник самртфон - совмещают функции , а не скетчи.
Интересное сравнение, но я бы сравнил так: ардуина с шилдом - комп, скетч - ОС. На одном компе несколько операционных систем далеко не редкость. При старте выбираем ОС и работаем.
Ну раз уже произведён в глупцы и по существу вопроса получил полезный ответ, то gwone отвечу как Манилов. В моём "образе" так: ардуина со скетчем это аппарат-программа периферийного устройства. Какой смысл в сматфоне который фотографирует, если фотик лучше, воспроизводит видео как и комп, но панель телека лучше, может играть музыку, но муз.центр лучше и т.д. Качество периферии отдельных изделий на голову выше качества "комбайна". С другой стороны хотелось бы иметь единый блок управления или реализации каждого из устройств, хотя бы с возможностью програмного улучшения. Этакий конструктор, где каждая часть взаимосвязана.
leks.Всегда найдутся люди, которые могут сделать лучше и больше сделать чем Вы. Значит вполне логичный ответ, зачем учиться. Но жизнь долгая вещь, и не учится будет скучно. Хотя и учеба процесс утомительный. Вот а теперь по теме. Ардуина это кирпичик. Но может не надо норовиться всовывать комплект разных скетчей в ардуину. А научиться всовывать функционалы разных скетчей. И да я примерно подобрал как объединять скетчи в единый блок, но к сожалению это скетчи написаные по определеным правилам.
У меня на форуме есть моя тема. Я конечно не навязываю вам ее. Да-да, нет-нет. Написал сумбурно. Понять тяжко. Но повторять одни и теже посты для желающих или не желающих еще тяжелее. Почитайте .http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-chainikov
Считаю, что что то в этом есть. Часто случается так что нужно одну и ту же плату использовать для разных целей. При этом нужно искать исходные тексты для каждого случая.
Как бы, всё реально. Только стоит ли игра свеч. Можно иметь файловую систему на ee либо sd. И можно быстренько загружать скетчи с внешнего носителя. Только заради чего? Не видно применения. Может фантазии недостаточно?)
leks.Всегда найдутся люди, которые могут сделать лучше и больше сделать чем Вы. Значит вполне логичный ответ, зачем учиться. Но жизнь долгая вещь, и не учится будет скучно. Хотя и учеба процесс утомительный. Вот а теперь по теме. Ардуина это кирпичик. Но может не надо норовиться всовывать комплект разных скетчей в ардуину. А научиться всовывать функционалы разных скетчей. И да я примерно подобрал как объединять скетчи в единый блок, но к сожалению это скетчи написаные по определеным правилам.
У меня на форуме есть моя тема. Я конечно не навязываю вам ее. Да-да, нет-нет. Написал сумбурно. Понять тяжко. Но повторять одни и теже посты для желающих или не желающих еще тяжелее. Почитайте .http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-chainikov
Ссылка, наверное с лишней точкой. Посмотрю ещё раз..и ещё раз. Моя детсадовская стратегия проста, помигал, покрутил, попищал с делаями - попробовал с библиотеками - научился использовать функцию, просто заменяющую делай, а внутри опрашивающую датчики, теперь хочется научиться писать скетч для разных отдельных поделок. То есть не печалюсь (пока) как объединять разрозненные скетчи со своей периферией в один комбайн ;) c крутым функционалом.
Товарищи фермеры, железный конь требует для питания бензин, а не сено. И не надо сувать сено под капот. Железный конь все равно не научится питаться сеном. И не надо запрягать железного коня в телегу. Особенно если по три штуки. Все равно привычной тройки коней у вас не получится.
Ардуино это коммерческий проект. Стратегия больше отжать бабла, а не научить программированию . Так как люди научившиеся писать комбайны на Ардуине, начнут конкурировать уже с людьми владеющими фирмой Ардуино.
http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-ch...
...То есть не печалюсь (пока) как объединять разрозненные скетчи со своей периферией в один комбайн ;) c крутым функционалом.
Вы всерьез ситаете, что литературные произведения делаются так: берутся "Преступление и наказание" и "Война и мир" и из них комбинируюются главы так, чтобы получить желаемое?
Точно так же и в программировании: программы пишут из отдельных букв, а не из готовых скетчей.
Мне трудно судить, беру пример, пытаюсь понять смысл каждой команды, переделываю-трансформирую скетч. Поэтому сказать, что пишу по буквам не могу (манипуляции идут на уровне смысловых фрагментов скетчей)... А сколько на форуме просилок типа "как два в один соединить ?, а три?" В то же время понимаю, что рвать на куски его не получится (достаточно потерять скобку, индекс или ещё чего), не убрать лишнее - в итоге всё работает не так...
Маловато простых практических примеров применения, как мне "каатся".
В этой главе мы узнаем, как определять типы и использовать объекты классов; увидим, что определение класса вводит как данные-члены, описывающие его, так и функции-члены, составляющие набор операций, применимых к объектам класса. Мы покажем, как можно обеспечить сокрытие информации, объявив внутреннее представление и реализацию закрытыми, но открыв операции над объектами. Говорят, что закрытое внутреннее представление инкапсулировано, а открытую часть класса называют его интерфейсом.
Вот, вчитался по рекомендации "свыше". Тоска, трудно это понимать после мигания светодиодами ;)
А работу с развлечениями. Что бы был толк надо пахать с литературой. Вот для чего мы вас паршиво встретили, что бы вы не эмигрировали, а потом выли - пожалейте меня бедненького, скиньте скетчик .