Привет друзья! Из видео Arduino функции мы уже знаем, что в функцию можно передавать много переменных, а возвращать она может: или ничего (тип void), или только одну переменную с типом, указанным при объявлении функции. Но что делать, если есть необходимость возвращать из функции две и более переменных?

Для решения этой задачи есть несколько способов. Сейчас мы их рассмотрим.
Самый простой вариант – это использование глобальных переменных внутри функции.

Создаем глобальные переменные a и b типа integer. И внутри функции my_func проводим над ними математические манипуляции.
При каждом вызове функции обе переменные a и b будут изменяться. При этом способе функция изменяет значения только конкретных глобальных переменных, и не идет речь о возвращении разных переменных при множественном обращении к функции в программе. То есть, если в этом примере нужно будет изменять значения параллельно, и у других переменных, например, c и d при помощи существующей функции, то напрямую это не получится.
Результат выполнения этого скетча на мониторе порта. Здесь первая переменная увеличивается, а вторая уменьшается на единицу.
Способ прост в понимании и использовании, но мало функционален.
Более изящный способ – это передача значений переменных функции по ссылке. Для переменных, которые вы хотите изменить. Здесь уже глобальные переменные не обязательны. Основная идея здесь, что функция может возвращать некоторые входные переменные уже с изменённым значением.

Чтобы обозначить такую входную переменную, значение которой нужно изменять, необходимо просто поставить значек & перед названием принимающей переменной при объявлении функции.
Функция будет изменять значения входных переменных. Если при вызове функции передать ей переменные a и b, то она произведет с ними вычисления и присвоит им новые значения. Здесь в примере первая переменная увеличивается на единицу, а вторая уменьшается на единицу при каждом вызове функции. Входная переменная может использоваться в этом случае и как входная информация и как ячейка для хранения выходной информации.
Результат выполнения данного примера в окне монитора порта. Здесь при первом вызове функции изменились значения переменных a и b. А дальше циклично изменяются значения второй пары переменных.
Этот способ сложнее для понимания, но максимально удобен и гибок. Подходит для большинства задач. Он действительно крут!
Третий способ – это применение структуры в типе функции. Таким образом из функции можно возвращать много переменных различного типа. Структура – это пользовательский тип данных, который может состоять из множества обычных стандартных типов данных.

Сначала объявляется структура под названием my_Struct. В ней место под две переменные типа integer. Здесь потенциально может быть много переменных различного типа.
Потом идет объявление переменной datas с созданным нами типом my_Struct.
Функцию объявляем тоже с типом my_Struct. И в самой функции тоже нужно объявить переменную типа my_Struct, которая будет передаваться наружу через операнд return.
Вызов функции вставлен в loop(). Здесь функция с типом нашей структуры передает значения двух переменных типа integer, запакованные в структуру.
Результат выполнения такого скетча выведен в монитор порта.

Данный способ будет полезен в проектах, где целесообразно использовать структуры данных для описания свойств объектов.
Мне же больше всего нравится второй способ – передача параметров по ссылке . Он самый функциональный. А самый высокий пилотаж в программировании – это наверно комбинация первого и второго способов передачи нескольких переменных из функции, плюс обычная передача одной переменной, чтобы отобразить удачное выполнение функции или неудачное.
Желаю вам достичь космических высот в изучении и применении языка C. И применить эти знания на практике с пользой для себя и окружающих. Спасибо за внимание и до новых встреч!
Arduino SIM800 исходящий звонок ATD
Привет друзья! Это продолжение серии статей о работе с SIM800. Всех их можно найти на этом канале.&n..
Держатель 8мм линейных направляющих CNC или 3d принтера 2шт.
Держатель для крепления цилиндрических направляющих каретки CNC-станка или 3d-принтераПод диаметр на..
108.96грн.
Датчик вибрации SW-420
Датчик вибрации SW-420 предназначен для обнаружения вибрации и ударов. Идеально подходит для систем ..
27.93грн.
Светодиод ультраяркий 3мм
Сверхяркий светодиод диаметром 3 ммКорпус прозрачный у светодиодов разного цвета свечения. То есть р..
0.99грн.
ESP32 или Arduino: что выбрать для вашего проекта?
ESP32 или Arduino: что выбрать для вашего проекта? Коротко: если вам нужен современный Wi-Fi/Blue..





