Привіт друзі! З відео 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. І застосувати ці знання на практиці з користю для себе та оточуючих. Дякуємо за увагу і до нових зустрічей!
Припой з флюсом 1,0мм 10г
Припой олов'янно-свинцевий ПОС-60 (Ø1мм, 10г) в колбі з безвідмивочним флюсом призначений для з'єдна..
97.25грн.
Тестуємо WEB-інструмент програмування Arduino на офіційному сайті
Подивимось ближче на веб-редакторНа офіційному сайті Arduino в розділі скачування засобів прог..
Датчик напруги мережі 220В
Гальванічно ізольований датчик наявності напруги мережі 220ВНапруга живлення логіки 3 ... 5 ВРозмір ..
106.67грн.
Використання внутрішнього Watchdog таймера в ESP32
Використання внутрішнього Watchdog таймера в ESP32 Watchdog (WDT) — це вбудований таймер мікрокон..
Прото модуль для WeMos D1 mini
Монтажний шилд під плату контролера WeMos D1 miniВ комплекті традиційно зібрані усілякі гребінк..
37.77грн.





