Несколько скетчей в ардуино

leks
Offline
Зарегистрирован: 22.10.2017

Набаловавшись с платой Ардуино УНО в разных самоделках -лента умных светодиодов, ходилка на сервоприводах, пищалка нот, перекручивая быстро плату с корпуса на корпус  и перевтыкивая проводки задумался вот над чем: неудобно бегать и перезагружать разные скетчи  каждый раз. Удобнее их просто переключать на плате, когда они все уже "внутри".  Вроде ничего сложного нет, но найти описание построения подобных скетчей не смог. Если кто знает или делал на простом - светики, моторчики поделитесь нюансами реализации.

Green
Offline
Зарегистрирован: 01.10.2015

ПК - чем не пример? Начинайте с малого -внешний накопитель/память, ДОС, и т.д. Назад, в будущее!

vk007
Offline
Зарегистрирован: 16.06.2015

Ну как бы на первый взгляд ничего сверхсложного - оформляете "отдельные скетчи" в виде функций (подпрограмм), ну и в зависимости от состояния какого-нибудь переключателя (например, опрашиваемого при старте в сетапе), работаете с нужной. Например, как-то так (условный код):

void program1()
{
  // тут делаем начальную инициализацию для подпрограммы 1 (подобие setup)
  while(1) // аналог loop
  {
    // код подпрограммы 1
  }
}

void program2()
{
  // начальная инициализация для подпрограммы 2
  while(1)
  {
    // код подпрограммы 2
  }
}

void program3()
{
  // начальная инициализация для подпрограммы 3
  while(1)
  {
    // код подпрограммы 3
  }
}

void setup()
{
  byte nProg = /* читаем/высчитываем состояние переключателя */;
  switch (nProg)
  {
    case 1: program1(); break;
    case 2: program2(); break;
    case 3: program3(); break;
  }
}

void loop()
{
}

 

5N62V
Offline
Зарегистрирован: 25.02.2016

leks пишет:

Если кто знает или делал на простом - светики, моторчики поделитесь нюансами реализации.

Для этого надо научиться стоить программу модульно: стоит переключать, и в зависимости от того, в каком он положении, работает соответствующий модуль программы. 

Проще всего эти модули реализовывать в отдельных функциях. Например в функции loop() программа определяет в каком положении переключатель, а оттуда передает управлению соответствующей функции. Правда, надо позаботиться, чтобы из этой функции управление регулярно возвращалось в  loop() , чтоб не пропустить тот момент, когда положение переключателя изменилось.

b707
Offline
Зарегистрирован: 26.05.2017

leks пишет:

Набаловавшись с платой Ардуино УНО в разных самоделках -лента умных светодиодов, ходилка на сервоприводах, пищалка нот, перекручивая быстро плату с корпуса на корпус  и перевтыкивая проводки задумался вот над чем: неудобно бегать и перезагружать разные скетчи  каждый раз.

Заливка модульного скетча не избавит вас от скучной и утомительной возьни с  перетыканием платы из поделки в поделку, переподлючением приводов и тд. ИМХО, перезаливка скетча - лишь малая и самая простая часть.  Поэтому чисто практический ответ на ваш вопрос - купите для каждой самоделки свою плату, они стоят сущие копейки - Ардуино Нано всего 110-120 рублей

Ну а если вопрос именно в заливке в плату одного универсального кода на все проекты - то вам уже дали несколько советов.

 

vk007
Offline
Зарегистрирован: 16.06.2015

5N62V пишет:

Правда, надо позаботиться, чтобы из этой функции управление регулярно возвращалось в  loop() , чтоб не пропустить тот момент, когда положение переключателя изменилось.

Зачем? Не думаю, что ТС захочет перевтыкать ардуину из платы в плату не отключая питание.

5N62V
Offline
Зарегистрирован: 25.02.2016

vk007 пишет:

Зачем? Не думаю, что ТС захочет перевтыкать ардуину из платы в плату не отключая питание.

Ну, так феншуйнее, что ли... :)

Зачем перетыкивать? група пинов - на светодиодах, другая группа - на серве, и т.д. Пинов не хватает - взял Мегу. :)

leks
Offline
Зарегистрирован: 22.10.2017

Да,  именно перепроверять состояние переключателя не надо. Достаточно одной исходной проверки его состояния. Только думал все модули-скетчи поместить в loop(), чтобы по условию if ограничивать их и "проигрывать до выключения питания" через goto.

С НАНО ещё не пробывал, с про мини - да, хороши когда один раз загрузил и всё. А так "отклеивать", отпаивать, переподключать к УНО, перепрошивать. С УНО ловчей, но дороговато.

sadman41
Offline
Зарегистрирован: 19.10.2016

leks пишет:

С НАНО ещё не пробывал, с про мини - да, хороши когда один раз загрузил и всё. А так "отклеивать", отпаивать, переподключать к УНО, перепрошивать. 

Зачем? 4 контакта с Mini Pro выводите и USB-TTL конвертор используете. Дел на 20 сек для перепрошивки.

vk007
Offline
Зарегистрирован: 16.06.2015

leks пишет:

Только думал все модули-скетчи поместить в loop(), чтобы по условию if ограничивать их и "проигрывать до выключения питания" через goto.

Не нужен там ни loop(), ни тем более goto. Смотрите мое первое сообщение - у каждой подпрограммы свой "сетап" и "луп", да там уже практически готовый шаблон.

leks
Offline
Зарегистрирован: 22.10.2017

5N62V пишет:

vk007 пишет:

Зачем? Не думаю, что ТС захочет перевтыкать ардуину из платы в плату не отключая питание.

Ну, так феншуйнее, что ли... :)

Зачем перетыкивать? група пинов - на светодиодах, другая группа - на серве, и т.д. Пинов не хватает - взял Мегу. :)

Нет, коробочки то разные, питание разное - всё скопом не получится.

b707
Offline
Зарегистрирован: 26.05.2017

leks пишет:

С НАНО ещё не пробывал

Нано - полный аналог уно, только компактней и дешевле.

leks пишет:
про мини - да, хороши когда один раз загрузил и всё. А так "отклеивать", отпаивать, переподключать к УНО, перепрошивать.

надо было при встраивании МИНИ в свою плату вывести на отдельный штыревой разъем пины для заливки скетча. И ничего "отклеивать" и "отпаивать" не пришлось бы, кабель подключил и прошил, не сложнее Уно

 

vk007
Offline
Зарегистрирован: 16.06.2015

Кстати насчет реализации переключателя: можно использовать два резистора, подключенные как делитель напряжения. Среднюю точку заводим на аналоговой пин (на всех устройствах его следует зарезервировать, чтобы использовался один и тот же). На каждом из устройств коэффициент делителя должен быть разным. Считывая напряжение с делителей, определяем, к какому из устройств подключена ардуина, и запускаем соответствующую программу. Например, считали значение от 100 до 200 - значит подключились к светодиодной моргалке, считали от 250 до 350 - к сервам, и т.д.

leks
Offline
Зарегистрирован: 22.10.2017

С НАНО что смущает... кроме МК там микросхема СН... с ней плата ( у меня ещё есть УНО подешевле с такой же CH...) долго грузится после включения питания.

Про шаблон готовый всё ясно кроме while (1). Как интерпритировать? Пока что???

vk007
Offline
Зарегистрирован: 16.06.2015

leks пишет:

всё ясно кроме while (1). Как интерпритировать? Пока что???

Вечный цикл. Т.е. работает точно так же, как и loop().

Перед while прописываем все то, что обычно пишем в setup() для "одиночной" программы - делаем начальную инициализацию и т.д., т.е. то, что должно выполниться один раз. А потом запускается while и крутится все, что внутри него, пока не выключим питание (или сброс).

leks
Offline
Зарегистрирован: 22.10.2017

vk007 пишет:

Кстати насчет реализации переключателя: можно использовать два резистора, подключенные как делитель напряжения. Среднюю точку заводим на аналоговой пин (на всех устройствах его следует зарезервировать, чтобы использовался один и тот же). На каждом из устройств коэффициент делителя должен быть разным. Считывая напряжение с делителей, определяем, к какому из устройств подключена ардуина, и запускаем соответствующую программу. Например, считали значение от 100 до 200 - значит подключились к светодиодной моргалке, считали от 250 до 350 - к сервам, и т.д.

Это типа ключа? - вставили в разъём на 3 ячейки сборку из двух данных резисторов и проигрываем соответствующий скетч?

vk007
Offline
Зарегистрирован: 16.06.2015

leks пишет:

Это типа ключа? - вставили в разъём на 3 ячейки сборку из двух данных резисторов и проигрываем соответствующий скетч?

Типа да. Чтобы занимать только один пин и с минимумом навески. Один конец одного резистора на +, второго - на землю, место их соединения - на аналоговый пин.

Только зачем эту сборку ставить на разъем? Если устройство распаяно на плате, то на той же плате следует запаять и эту сборку.

leks
Offline
Зарегистрирован: 22.10.2017

Согласен, ключ - лишний элемент (в данном месте).

bwn
Offline
Зарегистрирован: 25.08.2014

Что то вы сложное затеяли. Отладили на уне-нане, развели плату, распаяли, хоть МК голый с загрузчиком, хоть проминьку, вывели три вывода наружу и потратили полсотни рублей на USB-UART. Девайс всегда на боевом дежурстве, а захотели-перешили. ИМХО.

leks
Offline
Зарегистрирован: 22.10.2017

bwn пишет:

Что то вы сложное затеяли. Отладили на уне-нане, развели плату, распаяли, хоть МК голый с загрузчиком, хоть проминьку, вывели три вывода наружу и потратили полсотни рублей на USB-UART. Девайс всегда на боевом дежурстве, а захотели-перешили. ИМХО.

Да, наверное... Но на практике так - сделал, жалко УНО, закажу про мини, жду, поделку другую сделал, между старой и новой бегаю через "ищем скетч тот самый забытый и перепрошиваем", пришла мини - паяем разъёмы (шоб без лишнего), монтируем "на века". Через месяц пыления, модернизируем, опять через уно, допаиваем разъёмы на про мини и т.д. и т.п. Вот и зреет крамола в голове, бегать с многоскетчевой УНО и не рыть их по отдельности.

sadman41
Offline
Зарегистрирован: 19.10.2016

leks пишет:

разъёмы на про мини и т.д. и т.п. Вот и зреет крамола в голове, бегать с многоскетчевой УНО и не рыть их по отдельности.

МК - это не бездонная бочка, ресурсы ограничены. Вы не сможете залить туда десяток скетчей и отдавать ProgMem space и RAM только активному.

bwn
Offline
Зарегистрирован: 25.08.2014

Я себе просто сразу чипов десяток заказал и трачу потихоньку. Если обновить, то эмулятор на уне дома на столе, заработало, взял ноут, переходник и пошел перешил на месте. Ну а что бы разъемы не допаивать, это сразу надо ТЗ писать, а не по ходу придумывать. А если уж назрел такой апгрейд, наверно проще новую плату под тот же форм фактор развести. Да, и чипы паять проще чем проминьку. ИМХО.

vk007
Offline
Зарегистрирован: 16.06.2015

Оно понятно, что лучше на каждое устройство свой контроллер и не париться. Но задумка ТС, считаю, не такая уж и наивная, и тоже имеет право на жизнь. Например, в целях демонстрации в процессе привлечения детей. Такие програмки занимают немного места и поместиться в памяти их может несколько легко. Имеем, например уно, обкатанный скетч и несколько самопальных шилдов. Поцепили один шилд - светомузыка, другой - пианина, третий - еще какая-то хрень и т.д. Быстро, удобно и без промежуточных перепрошивок.

leks
Offline
Зарегистрирован: 22.10.2017

bwn пишет:

Я себе просто сразу чипов десяток заказал и трачу потихоньку. Если обновить, то эмулятор на уне дома на столе, заработало, взял ноут, переходник и пошел перешил на месте. Ну а что бы разъемы не допаивать, это сразу надо ТЗ писать, а не по ходу придумывать. А если уж назрел такой апгрейд, наверно проще новую плату под тот же форм фактор развести. Да, и чипы паять проще чем проминьку. ИМХО.

Сейчас обхожусь без плат, уже лет пять не режу и не травлю кроме примитивных соединений - потому паять чипы будет тяжко.

 

leks
Offline
Зарегистрирован: 22.10.2017

vk007 пишет:

Оно понятно, что лучше на каждое устройство свой контроллер и не париться. Но задумка ТС, считаю, не такая уж и наивная, и тоже имеет право на жизнь. Например, в целях демонстрации в процессе привлечения детей. Такие програмки занимают немного места и поместиться в памяти их может несколько легко. Имеем, например уно, обкатанный скетч и несколько самопальных шилдов. Поцепили один шилд - светомузыка, другой - пианина, третий - еще какая-то хрень и т.д. Быстро, удобно и без промежуточных перепрошивок.

А главное, развенчан миф - одна плата, одна поделка, один скетч ;)Но в моём случае, ещё плюс жадность:(

bwn
Offline
Зарегистрирован: 25.08.2014

leks пишет:

Сейчас обхожусь без плат, уже лет пять не режу и не травлю кроме примитивных соединений - потому паять чипы будет тяжко.

У меня почти двадцать лет перерыв был. А потом немного с ЛУТом помучался, лупу с подсветкой купил (руки с годами коротковаты стали), на станцию паяльную простенькую разорился и все гут, до 0603 вполне комфортно.

vk007
Offline
Зарегистрирован: 16.06.2015

leks пишет:

А главное, развенчан миф - одна плата, одна поделка, один скетч ;)

Ну, тут как-бы никаких мифов нет. Любое более менее сложное устройство занимается кучей всякой хрени. Например, описанный на этом сайте осциллограф совмещенный с генератором сигналов - два устройства, но в одном скетче и никаких мифов. А часы, например, куда только не лепят, как дополнительный функционал.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Очередной Мичурин. Дать стране угля  скетчи , много но мелкого бестолковых. И все на одной плате.

leks
Offline
Зарегистрирован: 22.10.2017

vk007 пишет:

leks пишет:

А главное, развенчан миф - одна плата, одна поделка, один скетч ;)

Ну, тут как-бы никаких мифов нет. Любое более менее сложное устройство занимается кучей всякой хрени. Например, описанный на этом сайте осциллограф совмещенный с генератором сигналов - два устройства, но в одном скетче и никаких мифов. А часы, например, куда только не лепят, как дополнительный функционал.

Это я согласен, но гораздо "эффектнее на публике" если одна плата сразу и по очереди и в часах на светодиодных матрицах и в часах на сервах и в часах на микроамперметрах ;)

Но, изначально, всё равно жадность мною движет...

 

 

leks
Offline
Зарегистрирован: 22.10.2017

qwone пишет:

Очередной Мичурин. Дать стране угля  скетчи , много но мелкого бестолковых. И все на одной плате.

А Мичурин жадный был?.. Да ничего тут бестолкового нет, соединив два, три скетча, будет одна платка пылится на две-три поделки - вот и усё!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

leks пишет:
Это я согласен, но гораздо "эффектнее на публике" если одна плата сразу и по очереди и в часах на светодиодных матрицах и в часах на сервах и в часах на микроамперметрах ;)

Вы хотете сделать цирковой номер. То это да надо работать на публику. 

Цитата:
Но, изначально, всё равно жадность мною движет...
Разведенная ,как коктель Молотова,  50 на 50 с глупостью. Согласен убойная смесь для пользователя.

Совместите холодильник и унитаз . Компактно и места много в квартире образовалось. Вот только жрать с унитаза и гадить в холодильник почему-то желающих нет.

ПС: Посмотрите кругом- компьютер планшетник самртфон - совмещают функции , а не скетчи. Потому что если совместить только скетчи , то как минимум надо перезапускать. А в вашем снимать плату с одного и вешить на другое. Так грохнуть плату еще вернее.

leks
Offline
Зарегистрирован: 22.10.2017

Я глупый, вы умный и что дальше?

vk007
Offline
Зарегистрирован: 16.06.2015

Да ладно, чего набросились то? Если человеку хочется и нравится, то пускай экспериментирует себе на здоровье.

qwone пишет:

ПС: Посмотрите кругом- компьютер планшетник самртфон - совмещают функции , а не скетчи.

Интересное сравнение, но я бы сравнил так: ардуина с шилдом - комп, скетч - ОС. На одном компе несколько операционных систем далеко не редкость. При старте выбираем ОС и работаем.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

vk007 пишет:
Интересное сравнение, но я бы сравнил так: ардуина с шилдом - комп, скетч - ОС. На одном компе несколько операционных систем далеко не редкость. При старте выбираем ОС и работаем.
Вот только если бы ТС предложил бы заливать не 10 примитивных скетчей , а пару ОСей , тогда было в порядке. Тем более зачем меняют ОСь. Для работы с информацией которая и так находится на компе. Но корректно работает только под определенной ОСью, так как ОСи между собой не совместимы. Но если писать с нуля, то лучше что бы ОСь была бы универсальная.

leks
Offline
Зарегистрирован: 22.10.2017

Ну раз уже произведён в глупцы и по существу вопроса получил полезный ответ, то gwone отвечу как Манилов. В моём "образе" так: ардуина со скетчем это аппарат-программа периферийного устройства. Какой смысл в сматфоне который фотографирует, если фотик лучше, воспроизводит видео как и комп, но панель телека лучше, может играть музыку, но муз.центр лучше и т.д. Качество периферии отдельных изделий на голову выше  качества "комбайна". С другой стороны хотелось бы иметь единый блок управления или реализации каждого из устройств, хотя бы с возможностью програмного улучшения. Этакий конструктор, где каждая часть взаимосвязана.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

leks.Всегда найдутся люди, которые могут сделать лучше и больше сделать чем Вы. Значит вполне логичный ответ, зачем учиться. Но жизнь долгая вещь, и не учится будет скучно. Хотя и учеба процесс утомительный. Вот а теперь по теме. Ардуина это кирпичик. Но может не надо норовиться всовывать комплект разных скетчей в ардуину. А научиться всовывать функционалы разных скетчей. И да я примерно подобрал как объединять скетчи в единый блок, но к сожалению это скетчи написаные по определеным правилам. 

 У меня на форуме есть моя тема. Я конечно не навязываю вам ее. Да-да, нет-нет. Написал сумбурно. Понять тяжко. Но повторять одни и теже посты для желающих или не желающих еще тяжелее. Почитайте .http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-chainikov 

Green
Offline
Зарегистрирован: 01.10.2015

Считаю, что что то в этом есть. Часто случается так что нужно одну и ту же плату использовать для разных целей. При этом нужно искать исходные тексты для каждого случая.
Как бы, всё реально. Только стоит ли игра свеч. Можно иметь файловую систему на ee либо sd. И можно быстренько загружать скетчи с внешнего носителя. Только заради чего? Не видно применения. Может фантазии недостаточно?)

leks
Offline
Зарегистрирован: 22.10.2017

qwone пишет:

leks.Всегда найдутся люди, которые могут сделать лучше и больше сделать чем Вы. Значит вполне логичный ответ, зачем учиться. Но жизнь долгая вещь, и не учится будет скучно. Хотя и учеба процесс утомительный. Вот а теперь по теме. Ардуина это кирпичик. Но может не надо норовиться всовывать комплект разных скетчей в ардуину. А научиться всовывать функционалы разных скетчей. И да я примерно подобрал как объединять скетчи в единый блок, но к сожалению это скетчи написаные по определеным правилам. 

 У меня на форуме есть моя тема. Я конечно не навязываю вам ее. Да-да, нет-нет. Написал сумбурно. Понять тяжко. Но повторять одни и теже посты для желающих или не желающих еще тяжелее. Почитайте .http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-chainikov 

Ссылка, наверное с лишней точкой. Посмотрю ещё раз..и ещё раз. Моя детсадовская стратегия проста, помигал, покрутил, попищал с делаями - попробовал с библиотеками - научился использовать функцию, просто заменяющую делай, а внутри опрашивающую датчики, теперь хочется научиться писать скетч для разных отдельных поделок. То есть не печалюсь (пока) как объединять разрозненные скетчи со своей периферией в один комбайн ;) c крутым функционалом.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

leks пишет:
Моя детсадовская стратегия проста, помигал, покрутил, попищал с делаями - попробовал с библиотеками - научился использовать функцию, просто заменяющую делай, а внутри опрашивающую датчики, теперь хочется научиться писать скетч для разных отдельных поделок. То есть не печалюсь (пока) как объединять разрозненные скетчи со своей периферией в один комбайн ;) c крутым функционалом.
А вот здесь самый большой облом. Если у вас нет фундаментальных знаний по программированию , то дальше мигания ничего не выйдет.  

Товарищи фермеры, железный конь требует для питания бензин, а не сено. И не надо сувать сено под капот. Железный конь все равно не научится питаться сеном. И не надо запрягать железного коня в телегу. Особенно если по три штуки. Все равно привычной тройки коней у вас не получится. 

Ардуино это коммерческий проект. Стратегия больше отжать бабла, а не научить программированию . Так как люди научившиеся писать комбайны на Ардуине, начнут конкурировать уже с людьми владеющими фирмой Ардуино.

http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-ch...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

leks пишет:

...То есть не печалюсь (пока) как объединять разрозненные скетчи со своей периферией в один комбайн ;) c крутым функционалом.

Вы всерьез ситаете, что литературные произведения делаются так: берутся "Преступление и наказание" и "Война и мир" и из них комбинируюются главы так, чтобы получить желаемое?

 

Точно так же и в программировании: программы пишут из отдельных букв, а не из готовых скетчей.

leks
Offline
Зарегистрирован: 22.10.2017

Мне трудно судить, беру пример, пытаюсь понять смысл каждой команды, переделываю-трансформирую скетч. Поэтому сказать, что пишу по буквам не могу (манипуляции идут на уровне смысловых фрагментов скетчей)... А сколько на форуме просилок типа "как два в один соединить ?, а три?" В то же время понимаю, что рвать на куски его не получится (достаточно потерять скобку, индекс или ещё чего), не убрать лишнее - в итоге всё работает не так...

Маловато простых практических примеров применения, как мне "каатся".

leks
Offline
Зарегистрирован: 22.10.2017

В этой главе мы узнаем, как определять типы и использовать объекты классов; увидим, что определение класса вводит как данные-члены, описывающие его, так и функции-члены, составляющие набор операций, применимых к объектам класса. Мы покажем, как можно обеспечить сокрытие информации, объявив внутреннее представление и реализацию закрытыми, но открыв операции над объектами. Говорят, что закрытое внутреннее представление инкапсулировано, а открытую часть класса называют его интерфейсом.

Вот, вчитался по рекомендации "свыше". Тоска, трудно это понимать после мигания светодиодами ;)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

leks пишет:
Вот, вчитался по рекомендации "свыше". Тоска, трудно это понимать после мигания светодиодами ;
Вы перепутали туризм от эмиграции. https://www.youtube.com/watch?v=4nYPcwDY3mE 

А работу с развлечениями. Что бы был толк надо пахать с литературой. Вот для чего мы вас паршиво встретили, что бы вы не эмигрировали, а потом выли - пожалейте меня бедненького, скиньте скетчик .