Что такое функция
Функция - это именованный блок кода.
Примерами функций являются обязательные для любой программы для Arduino функции setup() и loop(). Но можно создавать и свои функции:
void setup()
{
setupPorts();
}
void loop()
{
}
void setupPorts()
{
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(10, INPUT);
}
Функция setupPorts() задает режимы работы используемых в скетче пинов.
При написании скетчей крайне рекомендуется использовать функции. Это дает следующие преимущества:
- Избавление от одинаковых блоков кода в скетче, достаточно создать функцию и перенести в нее повторно исполняемый код. При этом размер скетча также станет меньше.
- Код гораздо легче отлаживать. В случае неверного выполнение кода легко проверить все функции по отдельности и выяснить, в какой из них ошибка.
- Намного легче прочитать и понять, как код должен работать. Особенно если выбраны "говорящие" названия функций, а также каждая функция выполняет свою конкретную логическую задачу.
- Дорабатывать такой код также гораздо проще. Если нужно внести исправление в логику работы какого-то алгоритма в коде, достаточно найти функцию, в которой реализована логика, поправить код и проверить ее работу.
- Код становится более модульным и уже разработанные функции в одном проекте легко перенести в другой проект.
Параметры
Функция может принимать на вход некоторое количество переменных, называемых параметрами. Пример функций, принимающих параметры:
void lampOn(int pin)
{
digitalWrite(pin, HIGH);
}
void lampOff(int pin)
{
digitalWrite(pin, LOW);
}
Функция lampOn() зажигает светодиод, а функция lampOff() - гасит. Параметром является переменная pin типа int, в значении которой передается номер пина, к которому подключен светодиод.
Конечно можно было сделать переменную pin глобальной. Но гораздо лучше использовать параметры, это делает код менее подверженным ошибкам и более понятным.
Возвращаемые значения
Функция также может возвращать значение. Тип возвращаемого значения указывается перед именем функции. Если функция не возвращает значение, то перед ней указывается ключевое слово void.
void setup()
{
Serial.begin(9600);
if (isEven(7)) {
Serial.println("7 - четное число");
} else {
Serial.println("7 - не четное число");
}
if (isEven(10)) {
Serial.println("10 - четное число");
} else {
Serial.println("10 - не четное число");
}
}
void loop()
{
}
bool isEven(int num)
{
if (num % 2 == 0) {
return true;
} else {
return false;
}
}
Здесь мы определили функцию, которая проверяет, является ли число четным. Имя функции isEven(), на вход она принимает целое число, а возвращает результат типа bool. При выполнении кода в мониторе последовательного интерфейса мы увидим:
7 - не четное число
10 - четное число