Працюємо з 09:00 до 19:00 Пн-Пт
Київ біля ТЦ Квадрат бул.Перова

Доброго дня, друзі! Вы великі молодці, що зацікавились уроками Arduino!


Структура програми в Arduino IDE може змінюватись програмістом в залежності від задач і конкретних рішень, але основний її незмінний мінімальний скелет як на цьому прикладі обов'язково складається з двох функцій setup и loop. Без них програма не буде компілюватись.

void setup() {
  Serial.begin(9600);
  Serial.println("loop");
}
void loop() {
  delay(1000);
  Serial.println("loop");
}

Функція – це фрагмент програмного кода, що має унікальну назву і обмежений фігурними дужками, до якого можна звернутися з іншого місця програми.

Setup означає налаштування. Пряме назначення цієї функції складається в тому, щоб програмісти в ній задавали першопочаткові параметри функціоналу контроллера і програмних об'єктів, що використовуються в інших частинах програми.

Слово loop означає цикл, що повторюється – зациклювання виконання набору виразів, що знаходяться в цій функції. ЇЇ назначення в тому, щоб хранити вирази основного циклу програми контроллера.

Для розуміння розбіжностей між цими функціями, розглянемо блок-схему мінімальної програми Arduino.


Після старту контроллера приймається обробляти вирази, що знаходяться між фігурними дужками секції setup. 
Після закінчення виконання всіх завдань першої функції, контроллер береться за безкінечне послідовне виконання програмного коду секції loop, який за задумом повинен виконувати  всю корисну роботу, закладену нами , в динамічному режимі.
int led_pin = 13;
void setup() {
  Serial.begin(9600);
  pinMode(led_pin, OUTPUT);
  Serial.println("setup");
}
void loop() {
  digitalWrite(led_pin, HIGH);
  delay(1000);
  digitalWrite(led_pin, LOW);
  delay(1000);
  Serial.println("loop");
}
Теперь розглянемо простий приклад програми з подібною структурою, з закладеною можливістю моніторингу її виконання в моніторі порту, а також по индикації за допомогою  світлодіоду на платі контроллера. На платі Arduino Nano і UNO є світлодіод, підключений до 13-го піну і ним ця програма може блимати. Тут до розглянутої нами структури додався рядок коду, який знаходиться попереду і поза фігурними дужками будь-якої функції. В цьому місці прийнято розміщати рядки підключення бібліотек, оголошення глобальних перемінних, констант і екземплярів класів.
#include “LiquidCrystal.h”
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16, 2);
}
void loop() {
  lcd.print("Hello, world!");
  delay(1000);
}
Далі ускладнюємо структуру, щоб розглянути приклад підключення бібліотеки і оголошення екземпляра класу. Ця програма кожну секунду пише на LCD-індикаторі «Hello, world!». Але індикаторами ми займемось пізніше, а зараз звернемо увагу на характерні рядки коду, які в подальшому часто нам будуть траплятися в різних скетчах. На першому місці стоїть звернення до бібліотеки для роботи з символьними рідкокристалічними індикаторами LiquidCrystal, а далі рядок оголошеня екземпляру одного LCD-индикатора з зазначенням пінів контроллера, до яких він підключений. Далі в секції setup активується метод початкової ініціалізації LCD-індикатора, в який передаються його параметри – якість символів в рядку і кількість рядків. Це і є початкове налаштування. А далі програма приступає до основного свого призначення – відправки одного і того ж повідомлення на екран індикатора з періодичністю в 1000мс. І традиційно основна робоча частина програми заключена в секцію loop.
Також слід розглянути характерний приклад структури програми з призначеною для користувача функцією. Тут ми бачимо все той же скелет програми, але з використанням додаткової функції myfunc, яка визивається із секції loop. Тобто виконання основного циклу програми буде кожен раз переривається для виконання цієї функції. Призначеними для користувача функціями зручно користуватися, але про це ми дізнаємось в наступних уроках.
#include "LiquidCrystal.h"
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16, 2);
}
void loop() {
  myfunc();
  delay(1000);
}
void myfunc(){
  lcd.print("Hello, world!");
}
Ще нам часто в скетчах будуть зустрічатись коментарі, що відділяються від тексту  програми косими лініями і зірочками. Вони ігноруються компілятором програми і не беруть участь в роботі програми, але використовуються програмістами для різних пояснень стороннім читачам або нагадувань для себя самого. Вони можуть бути однорядковими і багаторядковими. Про них теж поговоримо пізніше.
/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
*/
int led_pin = 13;
// setup function
void setup() {
  Serial.begin(9600);
  pinMode(led_pin, OUTPUT);
  Serial.println("setup");
}
// loop function
void loop() {
  digitalWrite(led_pin, HIGH);
  delay(1000);
  digitalWrite(led_pin, LOW);
  delay(1000);
  Serial.println("loop");
}
Отже ми отримали уявлення про найпростіші цеглинки, що складають ваші майбутні програми-скетчі для контроллерів Arduino. Запам'ятали, що вміст функції setup обробляється контроллером один раз після запуску контроллера, а вміст функції loop обробляється циклічно без зупинки. Також ми знаємо, що скетч не буде компілюватися за відсутності цих функцій. Ще ми дізнались, що окрім цих стандартних секцій програма може містити і інші призначені для користувача або бібліотечні елементи, про які ми багато будемо говорити в наступних уроках по Arduino IDE.

<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Модуль стабілізатора напруги 5 В

Модуль стабілізатора напруги 5 В

Модуль призначений для живлення різних електронних пристроїв, модулів, контролерів, що працюють від ..

11.98грн.

Гребінка з'єднувальна 2,54мм папа під пайку 40pin

Гребінка з'єднувальна 2,54мм папа під пайку 40pin

Гребінка стандарту DIP 2,54 мм на 40 пінів під пайкуМожна ділити на потрібну кількість..

3.57грн.

Електромагнітне реле 24 В

Електромагнітне реле 24 В

Має одну групу перемикаючих контактівСтрум комутації за змінної напруги 250 В - 10 А,за постійної на..

15.02грн.

Набір датчиків ваги 200кг

Набір датчиків ваги 200кг

4 тензодатчика для вимірювання ваги до 200 кг при мостовому з'єданніКожний окремий датчик розрахован..

128.88грн.

Модуль реле 8-канальний 5В 10А

Модуль реле 8-канальний 5В 10А

8-канальный модуль реле для підключення напряму до дискретного виходу контролера. Світлодіодна індик..

186.14грн.