Функции Arduino
Разбиение исходного кода программы на отдельные фрагменты (будем называть их - функции) позволяет выделять отдельные логические подзадачи, которые в нужный момент выполняются и возвращают управление туда, откуда были "вызваны". Типичная причина создания функции - необходимость осуществлять определенное действие больше одного раза.
Использование функций (или, функциональный подход к программированию) имеет ряд преимуществ:
- функции помогают самоорганизации программиста, часто способствуя более четкому осмыслению программы;
- кодирование функции сосредоточено в одном месте программы - она должна быть написана и отлажена один раз;
- функции позволяют уменьшить размер скетча и сделать его более компактным, поскольку один и тот же код может использован много раз;
- уменьшается вероятность ошибок, если надо изменить поведение кода - это тоже надо делать только в одном месте;
- функции проще переносить в другие программы и делать общий код более читаемым.
В скетче Arduino должны быть две обязательные функции - setup() и loop(). Остальные функции должны находиться за пределами фигурных скобок этих функций (до или после).
Разберем в качестве примера простую функцию, умножающую два числа.
Для "вызова" нашей простейшей функции умножения, мы должны передать ей параметры, соблюдая соответствие их типов тем, которые она ожидает (а именно целые числа):
1 2 3 4 5 6 7 8 |
void loop{ int i = 2; int j = 3; int k; k = myMultiplyFunction(i, j); // в k будет помещен результат "возвращенный" //функцией myMultiplyFunction. То есть 6. } |
При этом функция обязательно должна быть объявлена за пределами других функций, например, после функции loop(), перед setup() или после setup() и перед loop()
Целиком текст полученного скетча будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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; } |
return
Описание
Завершает текущую функцию и возвращает результат в вызвавшую функцию (если необходимо).
Синтаксис
1 2 |
return; return value; // обе формы записи допустимы |
value: любая переменная или константа
Пример
1 2 3 4 5 6 7 |
int myAnalogSensor(){ if (analogRead(0) > 100) { return true; else{ return false; } } |