FunctionDeclaration

Материал из MK90.ORG wiki
Перейти к: навигация, поиск

Справка Язык | Библиотеки | Сравнение | Изменения

Функции

Описание

Разбиение исходного кода программы на отдельные фрагменты-функции позволяет выделять отдельные логические подзадачи, которые в нужный момент выполняются и возвращают управление туда, откуда были "вызваны". Типичная причина создания функции - необходимость осуществлять определенное действие больше одного раза.

Для программистов, знающих BASIC, функции Arduino обеспечивают (и даже расширяют) механизм подпрограмм (GOSUB).

Использование функций (или, функциональный подход к программированию) имеет ряд преимуществ:

  • функции помогают самоорганизации программиста, часто способствуя более четкому осмыслению программы;
  • кодирование функции сосредоточено в одном месте программы - она должна быть написана и отлажена один раз;
  • функции позволяют уменьшить размер скетча и сделать его более компактным, поскольку один и тот же код может использован много раз;
  • уменьшается вероятность ошибок, если надо изменить поведение кода - это тоже надо делать только в одном месте;
  • функции проще переносить в другие программы и делать общий код более читаемым.

В скетче Arduino должны быть две обязательные функции - setup() и loop(). Остальные функции должны находиться за пределами фигурных скобок этих функций (до или после).

Разберем в качестве примера простую функцию, умножающую два числа.

Пример

FuncAnatomyRu.png

Для "вызова" нашей простейшей функции умножения, мы должны передать ей параметры, соблюдая соответствие их типов тем, которые она ожидает:


void loop{
  int i = 2;
  int j = 3;
  int k;

  k = myMultiplyFunction(i, j); // k теперь равно 6
}

Наша функция должна быть объявлена за пределами других функций, поэтому "myMultiplyFunction()" можно поместить, например, после функции loop().

Целиком текст полученного скетча будет выглядеть так:


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

void loop() {
  int i = 2;
  int j = 3;
  int k;

  k = myMultiplyFunction(i, j); // k теперь равно 6
  Serial.println(k);
  delay(500);
}

int myMultiplyFunction(int x, int y){
  int result;
  result = x * y;
  return result;
}

Другой пример

Эта функция считывает пять показания сенсора с помощью analogRead() и вычисляет среднее значение. Затем она масштабирует значение в 8 бит (значения от 0 до 255) и инвертирует, возвращая этот инвертированный результат.


int ReadSens_and_Condition(){
  int i;
  int sval = 0;

  for (i = 0; i < 5; i++){
    sval = sval + analogRead(0);    // сенсор подключен к аналоговому пину 0 
  }

  sval = sval / 5;    // среднее
  sval = sval / 4;    // масштабирование в 8 бит (0 - 255)
  sval = 255 - sval;  // инверсия 
  return sval;
}

Для вызова достаточно присвоить значение переменной:

int sens;

sens = ReadSens_and_Condition();

Руководство по Wiring


Исправления, пожелания и новые статьи должны быть опубликованы через Форум.

Оригинальные тексты руководств и переводы распространяются Arduino и MK90 на условиях лицензии Creative Commons Attribution-ShareAlike 3.0 License. Примеры исходных кодов и ссылки являются общественным достоянием.