Arduino

технологии

Функции

Что такое функция

Функция - это именованный блок кода.

Примерами функций являются обязательные для любой программы для 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 - четное число