Структура и синтаксис языка ArduinoIDE
- setup()
- loop()
- ; (точка с запятой)
- {} фигурные скобки
- // однострочный комментарий
- /**/ многострочный комментарий
- #define
- #include
setup()
Описание
Функция setup() вызывается при старте скетча. Обычно используется для инициализации переменных, установки режимов работы универсальных выводов (пинов), инициализации библиотек и т.п. Функция setup вызывается только один раз - после подачи питания или после сброса (нажатия на кнопку reset) платы Arduino.
Пример
1 2 3 4 5 6 7 8 9 10 11 12 |
int buttonPin = 3; void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop() { // ... } |
loop()
Описание
После завершения вызова функции setup(), начинает вызываться функция loop().
При этом вызов loop() в точности соответствует ее названию - после завершения выполнения ее тела, она будет вызываться снова и снова - и так до бесконечности. Таким образом обычно обеспечивается "активная" часть скетча, анализирующая состояние платы и выполняющая соответствующие действия.
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
int buttonPin = 3; // setup инициализирует последовательный порт и кнопку void setup() { beginSerial(9600); pinMode(buttonPin, INPUT); } // в цикле проверяется состояние кнопки, // в последовательный порт будет отправлено сообщение, если она нажата void loop() { if (digitalRead(buttonPin) == HIGH) serialWrite('H'); else serialWrite('L'); delay(1000); } |
; точка с запятой
Описание
Используется для завершения строки.
Пример
1 2 |
int p; p=123; |
В случае, если вы забыли поставить точку с запятой в конце строки, то это скорее всего приведет к ошибке компиляции.
Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду. Входной информацией для компилятора (исходный код) является описание алгоритма или программа на объектно-ориентированном языке (например ArduinoIDE), а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (0101000111100100010011111100010101).
{} фигурные скобки
Описание
Фигурные скобки (часто их называют просто "скобки") - важная конструкция языка программирования C. Иногда они вызывают затруднения у начинающих, поэтому их использование будет проиллюстрировано ниже.
Открывающая фигурная скобка "{" должна всегда иметь соответствующую закрывающую - "}". ArduinoIDE имеет специальную возможность проверки парности скобок. Для этого выделите скобку или установите курсор сразу за ней - и тогда будет подсвечена её пара.
Поскольку фигурные скобки используются во многих случаях, хорошем стилем считается печатать закрывающую сразу после открывающей (что автоматически выполняется в CodeBlocks например). Затем можно вернуться на символ назад, вставить новую строку между между ними, где уже и писать операторы. Таким образом, вы никогда не создадите ситуацию с "непарной" скобкой.
Скобки весьма важны с синтаксической точки зрения, и перемещение скобки на одну или две строки может привести к значительному воздействию на выполнение программы.
{} - используются для обхвата так сказать кода внутри этих скобок к чему либо (функции/классу/условию/циклу и т.д. и т.п). Фигурные скобки "открывают" и "закрывают" ту часть кода, которая относится к некоторой функции/классу/условию/циклу и т.д. и т.п.
Пример
1 2 3 4 5 6 |
void print(){ Serial.print("Hello WORLD!"); } void setup(){ F(); } |
Комментарии
Описание
Комментарии - это фрагменты программы, в которых обычно записывают пояснения о том, что она делает. Они полностью игнорируются компилятором, и поэтому ничего не занимают в памяти ATmega после загрузки скетча.
Компилятор — Компьютерная программа, выполняющая компиляцию (ArduinoIDE например).
Основная функция комментариев - помочь разобраться (или вспомнить), как работает программа или объяснить другим, что она делает. Существует два разных стиля написания комментариев:
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
int x; int gwb=10; void setup(){ x = 5; // Это - однострочный комментарий. Всё, что после двух слэшей - комментарий, // до конца строки /* это - многострочный комментарий - можно использовать для "комментирования" фрагментов программы if (gwb == 10){ // однострочный комментарий - это нормально внутри многострочного x = 3; } /* но многострочный комментарий не допускает вложенности - это не будет компилироваться */ Serial.print(x) //будет отображено 5 а не 3 } // не забудьте "зкарывающий" знак комментария - они должны быть сбалансированы |
#define
Описание
#define часто используется для определения значения имен констант до начала компиляции программы. Константы, которые определены таким образом, ничего не занимают в памяти микроконтроллера - компилятор подставит значения вместо имен во время компиляции.
Работа команды #define string1 string2 сравнима с операцией НАЙТИ и ЗАМЕНИТЬ в любом текстовом редакторе. До компиляции программы среда ArduinoIDE находит в тексте программы строку string1 и заменяет ее на string2
Однако, при использовании возможны побочные нежелательные эффекты - например, если имя определенной через #define константы вдруг входит хотя бы частично в имя другой переменной, то в этом случае произойдет ошибочная замена правильного части имени числом или текстом.
В общем случае, для объявления констант следует использовать ключевое слово const
Синтаксис
1 |
#define constantName value
|
1 |
#define ledPin 10; // это ошибка
|
1 |
#define ledPin = 3 // это тоже ошибка
|
#include
Описание
#include используется для подключения к скетчу внешних библиотек. Это дает возможность программисту не только использовать обширный инструментарий стандартных библиотек C, но и подключать библиотеки Arduino.
Помните, что в #include, также как и в #define, не требуется указывать завершающую точку с запятой, во избежании генерации трудночитаемых ошибок компилятора.
Пример
Этот пример подключает библиотеку, которая позволяет управлять Сервомоторами.
1 2 3 4 5 6 |
#include <Servo.h> //"подключаем" библиотеку для управления сервомоторами Servo myservo; // создать объект Servo // 12 объектов Servo может быть создано на одной плате int pos = 0; // переменная pos приравнивается к нулю |