В данной статье по программированию Arduino мы рассмотрим, что такое основной цикл в программном обеспечении, и продемонстрируем его работу в скетче.
Функция в скетче выполняет некоторую задачу (т.е. выполняет какое-то действие). Мы поговорим о том, как вызвать функцию, и когда ее использовать для выполнения указанной задачи.
Основной цикл
Как было показано в предыдущей статье, скетч Arduino состоит из двух основных функций, таких как setup () и loop (). Функция loop () — это основной цикл в скетче Arduino. После завершения выполнения инструкций, которые необходимо выполнить только один раз в функции setup (), выполнение программы начинается в функции loop ().
После того, как выполнение программы началось в основном цикле, операторы или инструкции в основном цикле будут выполняться непрерывно, пока Arduino не будет выключен или перезагружен. Основной цикл — это то место, где реализуются фактические рабочие функции Arduino — например, если Arduino запрограммирован как секвенсор мигающего света, тогда функциональность мигающего света будет помещена в основной цикл.
Почему это называется циклом?
Операторы в функции loop () будут выполняться сверху вниз, пока не будет достигнута нижняя часть функции loop (). Когда достигается нижняя часть функции цикла, операторы снова выполняются сверху функции loop (), таким образом завершая «цикл», как показано на изображении ниже:
Демонстрация скетча цикла
Скетч Main_loop показан ниже, он демонстрирует то, как основной цикл работает в Arduino. Введите вручную скетч в свою среду разработки Arduino или скопируйте и вставьте его в среду разработки.
Загрузите скетч в Arduino, а затем откройте окно Монитор порта, чтобы увидеть выводимый текст скетча в результате его работы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void setup() { Serial.begin(9600); Serial.println("*** Это сообщение будет отображаться только при запуске или сбросе. ***"); delay(2000); } void loop() { Serial.println("-- Arduino теперь наверху основного цикла. --"); Serial.println("--------------------------------------"); delay(2000); Serial.println("Выполнение инструкций в основном цикле."); delay(2000); Serial.println("Arduino теперь внизу основного цикла." ); } |
Текст, который скетч выводит на экране с помощью Монитор порта, показан ниже:
Текст в функции setup () отображается только один раз, когда только открывается окно Монитор порта или выполняется сброс Arduino. После этого выполнение программы переходит в функцию loop () и многократно выполняет операторы цикла сверху вниз и снова обратно вверх в бесконечном цикле.
Функции в демонстрационном скетча цикла
В приведенном выше скетче main_loop каждый оператор в setup () и loop () состоит из вызываемой функции — т.е. вызов означает, что она выполняется или запускается.
Функция delay ()
Когда функция delay () вызывается в операторе delay (2000); — эта функция задержки вызывает период ожидания в 2 секунды (в одной секунде 1000 миллисекунд, также записывается 1000 мс). Время задержки можно изменить, переписав другое значение в delay (), например, 3000 вызовет 3-секундную задержку: delay (3000);
Функция println ()
Функция println () отправляет текст с помощью USB-порта Arduino и Монитор порта на экран монитора.
Функция println () отличается от функции delay () тем, что перед ней стоит Serial и точка (.): Serial.println («Текст для печати.»);
Причина этой нотации (Serial. Function_name ()) заключается в том, что функция дает команду на отправку текста. Вы заметите в setup (), что еще вызывается Serial.begin () . Это функция begin (), влияет на Монитор порта — в данном случае, она устанавливает скорость передачи данных.
Эти функции, которым предшествует имя объекта (например, Serial), в объектно-ориентированном программировании называются методами.
Краткое описание функций
Мы надеемся, что следущая часть статьи прояснит, что это за функции, а также терминалогию, используемую с ними. Более глубокое понимание функций станет возможным только тогда, когда мы начнем писать наши собственные функции.
setup () и loop ()
setup () и loop () — две специальные функции, которые составляют часть структуры скетча Arduino.
На самом деле мы пишем эти специальные функции, предоставляя им тело функции (между открывающими и закрывающими фигурными скобками: {}) и записывая операторы в теле функции.
Операторы в этих функциях, в приведенном выше скетче, вызывали уже существующие функции, которые выполняют нужные нам задачи, например, настраивали скорость передачи данных, вызывали задержку во времени, выводили текст на экран.
Функции setup() и loop() автоматически вызываются в нужное время, поскольку они являются специальными функциями Arduino.
Вызов функций
Вызывая или используя уже существующие функции, мы используем код, который уже написал кто-то другой.
Функция delay () имеет тело функции, которое содержит операторы, вызывающие задержку. Мы не видим эти операторы или тело функции, потому что они либо являются частью языка программирования Arduino, либо существуют во внешней библиотеке функций.
Передача значения функции
Когда функция использует значение (например, число или текстовую строку), мы должны передать значение функции.
Передача значения в функцию delay ():
Мы вызываем функцию delay () в скетче, как в этом коде:
1 |
delay(2000); |
Это значение задержки в миллисекундах (2000) передается функции.
Передача значения функции println ():
Мы передаем нужный нам текст в функцию println (), как показано в этом коде:
1 |
Serial.println("Executing instructions in main loop."); |
Мы должны написать текст функции, чтобы функция знала, какой именно текст нужно отправлять с помощью порта USB. Текст между открывающей и закрывающей кавычками ( «» ) в программировании известен как строка.
Вот мы и разобрали с вами работу основного цикла и то, как работает вызов функции скетче Ардуино. В следующей статье, посвященной программированию Ардуино, мы поговорим о переменных.
С Уважением, МониторБанк