Arduino:Основы/Функции
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Функции[1]
Сегментирование кода по функциям позволяет программисту создавать модульные кусочки кода, выполняющие установленные задачи и возвращающие полученные результат в ту область кода, из которого эта функция была «вызвана». Типичная причина для использования функции – если программисту нужно выполнить в скетче одно и то же действие несколько раз.
Если вы из числа программистов, привыкших к BASIC, то функции в языке Arduino имеют функционал для использования «подпрограмм» (GOSUB в BASIC).
Сегментирование фрагментов кода в функции имеет следующие преимущества:
- Функции помогают программисту быть организованнее, что способствует более широкому пониманию создаваемого скетча
- Функция помещает одно действие в одном месте, поэтому работы по созданию и отладке функции нужно провести всего раз
- Это также снижает шансы ошибок при модификации (если код по какой-то причине нужно изменить)
- Благодаря функциям код, написанный в одном скетче, можно без особого труда использовать в другом, что делает такие скетчи более модульными. Кроме того, это имеет интересный побочный эффект – использование функций делает код более читаемым
Скетчу Arduino нужно как минимум две функции (их часто называют «блоками») – setup() и loop(). Прочие функции вписываются вне скобочек, обрамляющих две эти функции. К примеру, давайте создадим простую функцию, умножающую два числа.
Пример
Чтобы вызвать эту умножающую функцию, мы передаем ей параметры. Эти параметры должны иметь тип данных, совместимый с этой функцией.
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();
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |