Віримо в перемогу ЗСУ!
Працюємо з 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Модуль блока питания 3,3В 1А

Модуль блока питания 3,3В 1А

Зручний модуль живлення з 220В AC в 3,3В постійного струму. Розроблений для встановлення на друкован..

147.77грн.

Модуль годинника реального часу DS1302 + батарейка

Модуль годинника реального часу DS1302 + батарейка

Модуль годинника для любительських контролерів на основі спеціалізованої мікросхеми DS1302Напруга ло..

48.23грн.

Електро насос прозорий 12 В 100°С

Електро насос прозорий 12 В 100°С

Насос працює на основі діафрагми та може застосовуватися для перекачування харчових продуктівВитрата..

258.76грн.

Резистор змінний 1; 10; 200 кОм

Резистор змінний 1; 10; 200 кОм

Змінний резистор або потенціометр для встановлення на друковану плату. Опір налаштовується за допомо..

14.86грн.

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

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

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

17.24грн.