Привет друзья! Из видео 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. И применить эти знания на практике с пользой для себя и окружающих. Спасибо за внимание и до новых встреч!
Терминальный модуль для Wemos D1 mini
Модуль для установки Wemos D1 mini с винтовыми клеммниками.Имеет выход шины I2C нормализованный под ..
162.43грн.
Уроки Arduino структура программы для начинающих
Здравствуйте друзья! Вы большие молодцы, что заинтересовались уроками Arduino! Структура програ..
ESP32 и Telegram-бот: удалённое управление через интернет
ESP32 и Telegram-бот: удалённое управление через интернет Микроконтроллер ESP32 обладает встрое..
Шестерня для зубчатого ремня на 30 зубьев под ось 5 мм
Используется для передачи и редукции крутящего момента от двигателя до оси 5 ммКоличество зубьев 30 ..
79.88грн.
Озвучка тира Arduino Nano и MP3-проигрыватель
Постановка задачиЗадачей проекта является изготовление устройства озвучивания выстрелов 6-ти единиц ..





