Уроки технологии
Технология Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Arduino Setup Loop Functions

Когда вы открываете новую программу в Arduino IDE, вы сразу же получаете написанные для вас пустые функции void setup и void loop.

void setup() { 
    // put your setup code here, to run once: 
    } 

void loop() { 
    // put your main code here, to run repeatedly: 
    }

Что это за функции настройки void и цикла void в Arduino?

Настройка Void и цикл void: обязательные функции в Arduino

Функции настройки void и цикла void в Arduino являются обязательными. Попробуйте скомпилировать код, в котором отсутствует одна из этих функций, и вы получите ошибку.

Пример того, что происходит, когда в вашей программе Arduino C:\Users\user\AppData\Local\Temp\ccioFeXY.ltrans0.ltrans.o нет функции void setup(): В функции main': C:\Program Files ( x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:43: неопределенная ссылка на setup’collect2.exe: ошибка: ld вернул 1 статус выхода статус выхода 1 Ошибка компиляции для платы Arduino Uno. Когда вы запускаете «стандартную» программу на C/C++, вам необходимо написать «основную» функцию. Эта основная функция будет вызываться первой, а оттуда вы будете вызывать другие функции и выполнять функциональные возможности вашей программы.

В Arduino нет основной функции. Это заменяется настройкой и циклом. Вместо одной обязательной функции у вас есть 2. Вся ваша программа Arduino должна включать эти функции. Поверх них вы можете добавлять любое количество функций, переменных и создавать столько файлов, сколько захотите. Вам просто нужно убедиться, что присутствуют настройки void и цикл void.

Как работают настройка void и цикл void

Принцип

Поскольку функция «main» вызывается при запуске программы C/C++, функции настройки и цикла будут вызываться автоматически. Как только программа запустится:

  • Переменные, которые вы создаете поверх программы, будут объявлены/инициализированы.
  • Функция настройки будет вызвана один раз. — Весь код, который вы написали внутри этой функции, будет выполнен. После этого функция настройки завершается. — Теперь будет вызвана функция цикла, поэтому весь код внутри цикла будет выполнен.
  • Когда функция цикла существует, вернитесь к шагу 4. Код внутри установки void будет выполнен один и только один раз в начале программы. Затем код внутри цикла void будет выполняться снова и снова (отсюда и название «цикл»), пока вы:
  • Выключите плату Arduino.
  • или перезапустите программу Arduino – нажав кнопку сброса/загрузив новый скетч/повторно открыв последовательный монитор на некоторых платах Arduino. После запуска или перезапуска программы все данные – состояния переменных и шаг выполнения – из предыдущего запуска будут потеряны. Если вы хотите сохранить некоторые данные между различными запусками программы, простой способ — использовать команду Память EEPROM, если доступна.

Пример кода

Давайте напишем пример кода, чтобы подробно увидеть, как работают настройка void и цикл void в Arduino.

int counter;

void setup()
{
    Serial.begin(9600);
    counter = 10;
    Serial.print("Counter: ");
    Serial.println(counter);
}
void loop()
{
    counter++;
    Serial.print("Counter: ");
    Serial.println(counter);
    delay(1000);
}

И вот результат, когда вы скомпилируете код, загрузите его на плату Arduino и откроете Serial Monitor. Счетчик: 10 Счетчик: 11 Счетчик: 12 Счетчик: 13 Счетчик: 14 Счетчик: 15 Счетчик: 16 Отлично, теперь давайте проанализируем это, разбив код построчно.

Настройка инициализации и отмены

int счетчик; Сначала мы создаем глобальную переменную, чтобы мы могли изменять ее внутри функции и при этом иметь возможность получить ее значение в другой функции. Примечание: даже если вы объявите переменную, не инициализируя ее в Arduino, она автоматически получит значение «0» (подробнее о Язык Arduino). Итак, на этом этапе программы переменная счетчика содержит значение «0».

void setup() { 
    Serial.begin(9600);

Это начало функции настройки void. Исполнение начнется с

Serial.begin(9600);
counter = 10; 
Serial.print("Counter: "); 
Serial.println(counter); 
}

Еще в функции настройки мы устанавливаем новое значение (10) для переменной счетчика. И сразу после этого печатаем значение в Serial Monitor. В выводе вы получаете строку «Счетчик: 10». И как вы можете заметить, в строке 9 мы закрываем фигурные скобки для функции настройки void. Итак, что происходит сейчас?

void loop()

void loop() 
{ 
    counter++; 
    Serial.print("Counter: "); 
    Serial.println(counter); 
    delay(1000); 
}

Теперь вызывается функция цикла void, и каждая указанная вами здесь инструкция будет выполнена. В этом случае мы увеличиваем счетчик на 1 (поэтому при первом входе в цикл счетчик меняется с 10 на 11). Сразу после этого печатаем значение счетчика — это будет «Счетчик: 11». И, наконец, мы добавляем в программу паузу в 1 секунду, чтобы вывод на последовательном мониторе не отображался слишком быстро для нашего человеческого глаза. Что происходит, когда функция цикла void завершает работу? Ну, сразу после этого его вызывают еще раз. Таким образом, это означает, что строка, которая идет после строки 15, является строкой 12. Инструкция сразу после

задержка(1000); является
счетчик++;.

Поскольку переменная счетчика является глобальной переменной, ее значение не теряется, когда мы выходим из функции цикла и снова входим в нее. Итак, теперь мы увеличиваем его, оно увеличивается с 11 до 12. И цикл продолжается. Каждый раз, когда мы входим в цикл, мы добавляем 1 к счетчику, печатаем значение и ждем 1 секунду. Теперь, если вы выключите Arduino, программа остановится. Если вы перезапустите программу, весь прогресс для переменных будет потерян, и вся программа начнется с самого начала.

Написание программ Arduino – лучшие практики для цикла void и настройки void

Отлично, теперь, когда вы понимаете, как все работает, я собираюсь дать вам несколько рекомендаций, которые вы можете реализовать прямо сейчас в своих программах Arduino, относительно функций настройки void и функций цикла void.

Настройка Arduino void

Поскольку функция настройки void вызывается только один раз в самом начале программы, здесь можно будет:

  • Инициализировать значения переменных.
  • Настройка связи (например: последовательная).
  • Режимы настройки цифровых выводов (вход/выход).
  • Инициализируйте любой аппаратный компонент (датчик/исполнительный механизм), подключенный к Arduino.
  • И т. д. Установка void, как следует из названия, предназначена для выполнения любых настроек, необходимых в начале программы. Не пишите здесь основные функции, только код инициализации. В зависимости от сложности вашей программы вам может потребоваться написать много инструкций в этой функции void. Вы можете создавать новые функции, которые вызываете из настройки void, с этим нет проблем. И вообще, лучше избегайте использования задержки(), но в настройке void нет проблем: если компоненту требуется 2 секунды для инициализации после включения, подождите 2 секунды!

Пустой цикл Arduino

Теперь в цикле void вы напишете свою основную программу, зная, что инициализация уже выполнена. В этой функции всегда помните, что за последней строкой следует первая строка! Кроме того, любая переменная, объявленная вами внутри цикла void, будет потеряна, когда программа выйдет из программы и снова войдет в функцию. Итак, если вы хотите иметь возможность хранить данные между циклами 2 void, обязательно объявляйте переменные в более глобальной области. Что касается настройки void, то нет необходимости писать весь код непосредственно в функции. Вы можете создать столько других функций, сколько захотите ( и классы тоже), и вызывайте эти функции в цикле void. В идеале цикл void должен содержать всего несколько строк, вызывающих другие функции. Не раздувайте цикл void, так же, как вы не раздуваете свой «main» в стандартной программе C/C++. Наконец, обратите внимание на задержку(). В цикле void (и любой функции, вызываемой из цикла void) не стоит слишком долго блокировать выполнение кода, особенно если вы планируете выполнить какие-то действия. многопоточность с помощью Arduino.

Заключение

Теперь вы должны иметь лучшее представление о концепции настройки Arduino void и функциях цикла. А пока сосредоточьтесь на создании работающих программ и постарайтесь следовать лучшим практикам из этого руководства. По мере освоения Arduino вы получите больше понимания на собственном опыте. Этот опыт поможет вам решить, что вы можете/не можете делать в функциях настройки void и цикла void, потому что, в конце концов, каждая программа индивидуальна.