2 раза вызвать void setup

Тема в разделе "Флудилка", создана пользователем Platonizer, 30 дек 2019.

  1. Platonizer

    Platonizer Нуб

    Можно ли 2 раза вызвать void loop()??
    Код (Text):
    void loop() {
    lcd.print(temperature);
    }
    void loop() {
    Serial.print(temperature);
    Serial.print(/t);
    Serial.print(minute);
    }
     
    просто делаю апгрейт "Метеостанции" из Матрёшки.
     
  2. DIYMan

    DIYMan Guest

    Вызвать - да. Определить, т.е. сделать, как у вас написано - нет, можно только один раз.
     
    Andrey12 и NikitOS нравится это.
  3. NikitOS

    NikitOS Король шутов Администратор

    Код можно соединить. Руками, но все же...
    Нужно изучить, что и как в коде работает (да и как сам код пишется), а потом приступать
     
  4. asam

    asam Гик

    Так "2 раза вызвать void setup" или
    ?

    Вообщето loop() вызывается бесконечно пока питание подается или программа не зависнет.
    Вы лучше подробнее изложите чего конкретно хотите добиться.
     
  5. parovoZZ

    parovoZZ Гуру

    loop - это же колбэк функция? В которую из них вернётся выполнение программы?
     
  6. DIYMan

    DIYMan Guest

    Нет, loop - не callback функция, под определение callback она не подходит. Это просто функция, которую можно вызывать, откуда угодно, и сколько угодно. Но она, формально, по признакам - не callback.
     
    Platonizer и Andrey12 нравится это.
  7. DIYMan

    DIYMan Guest

    Для пояснения:

    1. Не callback:
    Код (C++):
    void loop()
    {
    }

    void main()
    {
      while(1) loop();
    }
    2. Callback:
    Код (C++):
    typedef void (*pFunc)(void);

    void callbackCaller( pFunc func)
    {
      func();
    }

    void loop()
    {
    }

    void main()
    {
      while(1) callbackCaller(loop);
    }
     
    Vovka, DetSimen и Andrey12 нравится это.
  8. kraus

    kraus Нерд

    Можно вызывать и больше чем 2 раза - с помощью прерывания.
     
  9. b707

    b707 Гуру

    можно и без прерываний
     
  10. NikitOS

    NikitOS Король шутов Администратор

    Можно и без некропостинга
     
    parovoZZ нравится это.
  11. kraus

    kraus Нерд

    ;) А дату-то я и не приметил.:)
     
  12. Код (C++):
    void main() {
    delayMicroseconds(1);
       PORTB |= (1<<SHE);
       delayMicroseconds(1);
        PORTB &= ~(1<<SHE);  
    Можно объявить функцию скажем чтобы она включала пин 6 (+5в) и выключала(0) эта конструкция встречается в 5 циклах, чтобы все не переписывать просто пишешь функцию и пусть цикл ее вызывает нужное количество раз

    void main()
     
    Последнее редактирование: 7 авг 2023
  13. что то типа этого
    Код (C++):
    for (int i = 0; i < var3 ; i++) {
    void main()
    }
    int (s = 0; s < var2 ; s++) {
    void main()
    }
     
     
  14. b707

    b707 Гуру

    невероятный бред - и по форме, и по содержанию.
    Во-первых, функцию main() в скетче ардуино определить нельзя, она там уже есть.
    Во-вторых,
    Код (C++):
    void main()
    - это не вызов функции
    и в-третьих, нафига это все?
     
  15. Igor68

    Igor68 Гуру

    Да конечно можно, только если Вы сможете надеть ботинки на уже обутые ноги! Снова зайдёте в хлебный магазин не выходя из него... ну и тому подобное.

    ЗЫ: А может Вам нужна многопоточность? Так это другая тема.
     
  16. parovoZZ

    parovoZZ Гуру

    Вы это зачем подняли? Причём ответами, которые к теме не относятся.
     
  17. Aleksey

    Aleksey Нуб

    Может воскресить тему? Играет перфекционизм, и...
    Вопрос то и правда интересный. Только переформулировать надо:
    Создаём мы тело программы в Arduino IDE:

    В которой функций становится много. И начинаем использовать вкладки, или файлы подключать.
    И вот, в дебрях, чтобы void func_76(); работала нужно добавить в void setup(){} ... Например определение пинов.

    Чтобы не возвращаться в начало, можно ли перед кодом void func_76(){} еще раз вызвать (и дополнить) void setup(){}?
    Код (C++):
    #define abc
    #include def

    void setup(){
    какие - то определения
    загрузка настроек из EEPROM
    еще какой-то код
    }

    void loop(){
    какой-то код
    еще код
    func_1(); //вызываем функцию 1
    func_2(); //вызываем функцию 2
    ...
    func_76(); //вызываем функцию 76
    }

    func_1(){}
    func_2(){}

    void setup(){
    pinmode (0, OUTPUT); //определяем пины
    pinMode (1, INPUT);

    func_79(){
    какой-то код
    }
     
    Компилятор будет ругаться.
    Но сама по себе идея интересная.
     
  18. Aleksey

    Aleksey Нуб

    Для себя решил делать так: Перед большими функциями ставить функцию с определением настроек, и обращаться к ним из void setup:
    Код (C++):
    #define abc
    #include def
    #include <EEPROM.h>

    void setup(){
    какие - то определения
    EEPROM.get (0, ghi)загрузка настроек из EEPROM
    еще какой-то код
    func_1_set();
    func_2_set();
    ...
    func_79_set();
    }

    void loop(){
    какой-то код
    еще код
    func_1(); //вызываем функцию 1
    func_2(); //вызываем функцию 2
    ...
    func_76(); //вызываем функцию 76
    }
    void func_1_set(){}
    void func_1(){}

    void func_2_set(){}
    void func_2(){}

    void func_79_set(){
    pinmode (0, OUTPUT); //определяем пины
    pinMode (1, INPUT);
    EEPROM.get (76, jkl); //Еще что-нибудь из EEPROM подгружаем
    }

    void func_79(){
    какой-то код
    }
    Но приходил к этому сам. На сколько это правильно - не знаю.
     
    Последнее редактирование: 9 июн 2024
  19. Asper Daffy

    Asper Daffy Иксперд

    Ну, да. Интересных идей много. Например, если "снаряд летит по параболе в плоскости вертикального наведения", то можно ведь положить пушку на бок и стрелять из-за угла, правда? Получится или нет, не знаю, нет пушки, чтобы проверить, но
     
    b707, DetSimen, Feofan и ещё 1-му нравится это.
  20. parovoZZ

    parovoZZ Гуру

    какие-то идейные ограничения мешают определить собственную функцию и вызывать её как угодно и откуда угодно?