Помогите объединить два и более скетчей в один

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем CasperSimfer, 7 дек 2014.

  1. Asper Daffy

    Asper Daffy Иксперд

    В чём она должна выражаться?
     
  2. Рокки1945

    Рокки1945 Гуру

    mSedZ5qk-GoRXkCxfG2uHyuPuBM-960.jpg
     
    Igor68 и DetSimen нравится это.
  3. parovoZZ

    parovoZZ Гуру

    Керниган и Ричи.
     
  4. Airbus

    Airbus Радиохулиган Модератор

    [​IMG]
     
    Igor68 нравится это.
  5. Igor68

    Igor68 Гуру

    Блин... почти про меня:)
     
  6. DMS

    DMS Нерд

    Надо засунуть несколько скетчей в один.
    Одновременная работа не нужна!
    Выбор при загрузке, дальше забыть о существовании второго, третьего.. и т,д.
    Пока не получается.
    Как это должно выглядеть?
    Сначала #include из всех
    Потом void setup() {} с выбором программы
    И потом while (1) {} с каждым скетчем внутри.
    Или как правильно?
     
  7. parovoZZ

    parovoZZ Гуру

    В программировании нет понятий Правильно-Неправильно. Если работает, то это и есть правильно.

    как это будет выглядеть?
     
  8. DMS

    DMS Нерд

    Пока не работает.
    Для начала через кнопку,
    Нажата при загрузке - выполнять 1 вариант, не нажата - 2 вариант.
    Как то так наверно:
    if (digitalRead(pin) == 1)
    {
    goto metka;
    }
    Потом можно попробовать менюшку на дисплее нарисовать.
     
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Во-во. Скомпилировали, скормили Протеусу. Работает - и слава богу. Как это будет выглядеть ? - Ну например : В Setup-e опрос АЦП. при 1-м Вольте - выставляем Флаг = 1, при 2-х вольтах Флаг=2 и тд. В Loop-е смотрим значение флага и вызываем нужную подпрограмму. И уже из нее не выходим, а для организации главного цикла подпрограммы - используем команду безусловного перехода на метку. А если вышли - попадем в Loop и снова пойдет проверка флага и возврат в эту же подпрограмму. Наверно как-то так. Но здесь мы все время занимаем один адрес в стеке. А о переполнении стека надо помнить.
     
    Последнее редактирование: 6 ноя 2024
    Airbus нравится это.
  10. Airbus

    Airbus Радиохулиган Модератор

    Можно и так в setup проверяем условие—по нему выставляем флаг 1,2,3 итд
    Далее в loop с помошью switch case проверяем флаг и согласно ему прыгаем в подпрограмму и крутимся в ней.
     
  11. parovoZZ

    parovoZZ Гуру

    что не работает?
    вот этот код?
    Код (C++):
    if (digitalRead(pin) == 1)
    {
    goto metka;
    }
     
  12. Asper Daffy

    Asper Daffy Иксперд

    Ты правда хочешь это сделать?

    Посмотри вот здесь, только внимательно, вдумчиво и до конца прочитай. Мож чего и поймёшь.

    https://readli.net/chitat-online/?b=446888&pg=1
     
    Последнее редактирование: 7 ноя 2024
    ИгорьК нравится это.
  13. ИгорьК

    ИгорьК Гуру

    Код зело красивый и правильный, но там к объяснялкам товарища добавляется минимум два фактора: дребезг и скорость "прохождения" setup - я бы не успел на кнопку нажать за его время :)

    Потому код будет чуть посложнее :)
     
    Airbus нравится это.
  14. Airbus

    Airbus Радиохулиган Модератор

    Ну может ему как раз и нужно чтоб setup отреагировал мгновенно на какое то начальное условие. Чтоб пуля не успела пролететь. Можно же там сделать цЫкл while и крутиться в нем пока не произойдет событие? А вот goto меня покоробило
     
    ИгорьК нравится это.
  15. ИгорьК

    ИгорьК Гуру

    Basic , басик, то есть... Там такого много было...
     
  16. ИгорьК

    ИгорьК Гуру

    " Ниче не понятно"...
     
  17. b707

    b707 Гуру

    обычно сначала зажимается кнопка, и только после этого перезагрузка. И нет никакого дребезга.
     
  18. b707

    b707 Гуру

    что там может не работать, интересно? Задачка элементарная.

    Учитывайте только. что при таком методе совмещения скетчей потребность в памяти будет суммарная на все совмещенные коды. То есть даже тот код, который не работает - память будет жрать. И если у вас в кодах есть какие-то большие библиотеки или графические экраны и тд - два кода могут в память и не влезть. Потому и не работает может быть.
     
  19. ИгорьК

    ИгорьК Гуру

    Сурово. Но справедливо.
     
  20. parovoZZ

    parovoZZ Гуру

    память в ОЗУ выделится только под глобальные переменные. Если код с локальными переменными не выполняется, то и память под них выделятся не будет. Сам код в ОЗУ не грузится - у нас не микропроцессор.