You are on page 1of 15

Основи ІТ та електронної інженерії

НУ “Львівська політехніка” Вус Б.С.

Методичні вказівки для створення програмних кодів


згідно із завданнями лабораторних робіт та проєкту

Програмні коди для простих задач, які розглядаються у лабораторних роботах та


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

Наприклад, потрібно враховувати, який початковий стан (цифровий рівень) мають


виводи уведення/виведення (І/О) при перезавантаженні процесорного модуля. Здебільшого
це може бути високий рівень. Тоді такий рівень цифрового сигналу вважається пасивним.
Відповідно активним рівнем, який ініціює виконання блоку програми буде низький рівень.

Якщо опитується зовнішій однобітовий сенсор чи наявний на виводі під’єднанім до


сенсора низький рівень, на ньому перед опитуванням завжди повинен бути високий
рівень. Низький рівень може виникати при виконанні попередніх етапів програми, тому
потрібно програмно завжди задавати перед опитуванням високий рівень.

У електромеханічному сенсорі контактного типу має місце дрижання контактів,


тому потрібно проводити заданий цикл опитування і тільки при упішному виконанні всіх
повторних програмних блоків даного циклу вважати що кнопка була натиснутою.

Для створення програми із задавання різних режимів повторним задаванням


натисків кнопки використовувати різні види циклів.

Наприклад, повторним натисканням кнопки потрібно задавати 10 значень швидкості


включення та виключення світлодіода.
Створюємо функцію опитування кнопки.

Задаємо цикл за виразом for (див. інформацію нижче) з константою 10. Після
виконання циклу він повинен обнулитися до початкового рівня.

Для кожного значення і == 1...10 лічильника циклу присвоюємо відповідні змінні –


часові паузи : delаy (1000)... delаy (100). Ці змінні використовуємо при виконанні циклу
засвічуванння світлодіодів по умові значення і.

Програмні коди, які виконують тотожні функції можна створювати різними


програмними засобами. Від оптимального вибору програмних засобів залежить надійна
робота програми.

Програму треба налагоджувати окремими найпростішими програмними блоками.


Потім налагоджувати «зшиті» програмні блоки. Бажано користуватися готовими
програмними блоками, які підтвердиди свою практичну ефективність.

Структура програмного коду

1. Напочатку програми проводиться декларування всіх змінних, які будуть


використовуватися у програмі. Наприклад, до них належать:
- вхідні пристрої(І) процесорної системи: фізичні (кнопки, клавіші, перемикачі
тощо),
- початкові умови (F) виконуваної програми (прапорці, вказівники)
- вихідні пристрої(О) процесорної системи: фізичні (світлодіоди, крокові
двигуни і т. ін.) .

Приклад:

int buttonPin = 7; // Вивід 7 (I) з під’єднаною кнопкою


int ledPin1 = 11; // Вивід 11 (O) з під’єднаним світлодіодом 1
int ledPin2 = 6; // Вивід 11 (O) з під’єднаним світлодіодом 2
int ledPin3 = 9; // Вивід 11 (O) з під’єднаним світлодіодом 3
int ledPin4 = 10; // Вивід 11 (O) з під’єднаним світлодіодом 4
int flag = 0; // Умова (F) – прапорець переходу
int regim = 0; // Умова (F) – вказівник (маркер) переходу

2. Наступною (основною) функціональною частиною програми є дві виконувані


функції:
setup() – підготовка,
loop() – виконання,

Функція setup()

Функція setup()виконується одноразово, коли програма стартує після


перезавантаження. Вона задає режими роботи виводів портів PinMode()на введення або
виведення даних (INPUT або OUTPUT), також може ініціювати послідовне з’єднання
окремих складових. Функція setup() повинна завжди бути у програмі, навіть при
відсутності будь-яких складових.

Приклад:

void setup()
{
pinMode (ledPin1 OUTPUT); // Виводиться сигнал управління на світлодіод 1
pinMode (ledPin1 OUTPUT); // Виводиться сигнал управління на світлодіод 2
pinMode (ledPin1 OUTPUT); // Виводиться сигнал управління на світлодіод 3
pinMode (ledPin1 OUTPUT); // Виводиться сигнал управління на світлодіод 4
}

Функція loop()
Функція loop()означає виконання програми, вона є основною частиною програми:
дозволяє виконувати взаємодію процесора із зовнішніми пристроями, проводити обробку
інформації тощо.

Приклад:
Індикація світлодіодами: Почергово з інтервалом 1000 мсек засвічуються додатковий, з
першого по четвертий, світлодіод, потім всі світлодіоди гаснуть і процес повторюється.

void loop()
{
digitalWrite(ledpin1, HIGH); // Виключити світлодіод 1
digitalWrite(ledpin2, HIGH); // Виключити світлодіод 2
digitalWrite(ledpin3, HIGH); // Виключити світлодіод 3
digitalWrite(ledpin4, HIGH); // Виключити світлодіод 4
digitalWrite(ledpin1, LOW); // Включити світлодіод 1
delay(1000); // Виконати паузу 1000 мсек
digitalWrite(ledpin1, LOW); // Включити світлодіод 2
delay(1000); // Виконати паузу 1000 мсек
digitalWrite(ledpin1, LOW); // Включити світлодіод 3
delay(1000); // Виконати паузу 1000 мсек
digitalWrite(ledpin1, LOW); // Включити світлодіод 4
delay(1000); // Виконати паузу 1000 мсек
}

Інші функції
Крім вище вказаних основних функцій, у програмі можуть використовуватися інші
функції, які вбудовуються в основну функцію void loop().
Така функція являє собою програмний блок, який виконує певну визначену задачу (певну
функцію). Функції використовуються у програмі для виконання задач, які повторюються.
Функції поділяються на два типи: int (така що повертає ціле (integer) значення) та функція
типу void , яка не повертає значення.

Фігурні дужки { }
Фігурні дужки визначають початок та кінець блоку вбудованої функції, блоку основної
функції for та if. Фігурні дужки повинні відкривати та закривати програмний блок.
Відсутність дужки унеможливить правильну компіляцію програми.
Крапка з комою ;
Крапка з комою повинна стояти в кінці виразу у програмному рядку, вона розділяє
елементи програми. Також вона використовується для розділення елементів циклу for .

Однорядковий коментар //
Однорядковий коментар є наступним після символу // і не повинен виходити за межі
програмного рядка. Такий коментар не читається компілятором.

Багаторядковий коментар (блок) /*.....*/


Багаторядковий коментар є текстом , який розміщений між символами /* та */. Він
пояснює роботу програми і не читається компілятором.

Управління програмою
Для виконання етапів програми можуть використовуватися різні умови (рис. 1).
Вибір необхідної умови залежить від задч, які повинна виконувати програма. Оптимальний
вибір потрібної умови забезпечує надійну роботу програми.

Рис. 1. Виконання етапу програми згідно з умовою та заданим виразом .


Вираз іf
При виконанні програми може виникнути потреба перевіряти виконання певної
умови, наприклад, чи одержане в результаті виконання певного етапу програми
(програмного блоку) аналогове число (змінна) буде перевищувати задане аналогове число
(константу). Якщо воно перевищує, відповідь ствердна (істинна) – true, тоді виконується
ділянка програми, поміщена у фігурних дужках. У іншому випадку, вказана ділянка в
дужках пропускається і виконання програми продовжується з оператора, який розміщений
після цієї ділянки.
На рис. 2 показано алгоритм включення світлодіода 1 або світлодіода 2 залежно від
виконання умови перевищення змінною значення константи.

Рис. 2. Алгоритм виконання етапу програми згідно з умовою та заданим виразом if.

Програма, яка реалізує цей алгоритм приведена нижче.


Приклад:
void loop()
{
digitalWrite(ledpin1, HIGH); // Виключити світлодіод 1
digitalWrite(ledpin1, HIGH); // Виключити світлодіод 2
{
if (someVariable ?? value)
{
digitalWrite(ledpin1, LOW); // Включити світлодіод 1
}

digitalWrite(ledpin2, LOW); // Включити світлодіод 2


}

Вираз іf… else

Якщо потрібно робити вибір виконання, дії першої або дії другої, залежно від
здійснення умови тоді використовується вираз іf… else. Наприклад, при перевірці
умови – цифрового стану виводу кнопки (buttonPin ) виконати дію (включити
світлодіод 1), якщо цей вивід має високий рівень HIGH, або включити світлодіод 2, якщо
вивід кнопки має низький рівень LOW.
На рис. 3 показано алгоритм включення світлодіода 1 або світлодіода 2 залежно від
виконання умови – цифрового рівня (високий/низький) кнопки.
Рис. 3. Алгоритм виконання етапу програми згідно з умовою та заданим виразом if...else.

Програма, яка реалізує цей алгоритм приведена нижче.

Приклад:

void loop()
{
digitalWrite(ledpin1, HIGH); // Виключити світлодіод 1
digitalWrite(ledpin1, HIGH); // Виключити світлодіод 2
{
if (inputPin == HIGH)
{
digitalWrite(ledpin1, LOW); // Включити світлодіод 1
}

else
{
digitalWrite(ledpin2, LOW); // Включити світлодіод 2
}

Вираз for
Вираз for використовується для циклічного виконання програмного блоку,
розміщеного у фігурних дужках. Програмний блок виконується задану кількість разів.
Підрахунок кількості повторно виконаних програмних блоків здійснюється лічильником.
Вміст лічильника нарощується на 1 при повторному виконаннню кожного разу
програмного блоку. Ініціалізація лічильника (локальної змінної) виконується одноразово
напочатку. Звіряння вмісту лічильники із заданим значенням необхідної кількості повторів
програмного блоку, відбувається при виконанні повторно програмного блоку. Якщо умова
істинна виконання повторів продовжується, у іншому випадку цикл завершується. На рис.
4 показано алгоритм виконання циклу.
Рис. 4. Алгоритм виконання програмного циклу згідно з умовами та заданим виразом for.

Програма циклу з виразом for, яка реалізує цей алгоритм приведена нижче.
Приклад:

void loop()
{
digitalWrite(ledpin1, HIGH); // Виключити світлодіод 1
{
for (int i=0; i<10; i++); // Декларує і, перевіряє чи і менше 10,
// збільшує і на 1
{
digitalWrite(ledpin1, LOW); // Включити світлодіод 1
delay(1000); // Виконати паузу 1000 мсек
digitalWrite(ledpin1, HIGH); // Виключити світлодіод 1
delay(2000); // Виконати паузу 2000 мсек

Вираз while
Вираз while ініціює виконання циклу, який може тривати нескінченну кількість
разів. Завершення циклу відбувається тільки при виконанні умови вказаної в дужках. Це
може бути числове значення – константа , або стан зовнішнього пристрою, наприклад,
сенсора. Звіряння значення одержуваної змінної із заданим значенням константи
відбувається напочатку при виконанні кожного повторного програмного блоку. Якщо
величина змінної менша від величини константи виконання циклу продовжується у іншому
випадку він завершується. На рис. 5 показано алгоритм виконання циклу.
Рис. 4. Алгоритм виконання програмного циклу згідно з умовами та заданим виразом while.

Програма – цикл з виразом while, яка реалізує цей алгоритм із умовою заданою
числовим значенням приведена нижче.

Приклад:

void loop()
{
digitalWrite(ledpin1, HIGH); // Виключити світлодіод 1
{
while (someVariable <50); // Перевіряє чи менша змінна від 50
{
digitalWrite(ledpin1, LOW); // Включити світлодіод 1
delay(1000); // Виконати паузу 1000 мсек
digitalWrite(ledpin1, HIGH); // Виключити світлодіод 1
delay(2000); // Виконати паузу 2000 мсек
someVariable++; // Збільшує змінну на 1

Програма – цикл з виразом while, яка реалізує вказаний вище алгоритм із


умовою – станом зовнішнього пристрою (сенсора).

Приклад:

void loop()
{
digitalWrite(ledpin1, HIGH); // Виключити світлодіод 1
{
while (someVariable <50); // Перевіряє чи менша змінна від 50
{
digitalWrite(ledpin1, LOW); // Включити світлодіод 1
delay(1000); // Виконати паузу 1000 мсек
digitalWrite(ledpin1, HIGH); // Виключити світлодіод 1
delay(2000); // Виконати паузу 2000 мсек
someVariable++; // Збільшує змінну на 1

Вираз do…while

Вираз do…while відрізняється тим що перевірка виконання умови проводиться не


перед виконанням програмного блоку а після його виконання. Таким чином хоча б один
раз відбувається виконання програмного блоку. Цикл з виразо do…while може
використовуватися у випадку коли потрібно перевірити стан зовнішнього пристрою

Рис. 4. Алгоритм виконання програмного циклу згідно з умовою та заданим виразом do…while.

Програма циклу з виразом do…while, із умовою – станом зовнішнього пристрою


(сенсора) показана нижче.

Приклад:

void loop()
{
digitalWrite(ledpin1, HIGH); // Виключити світлодіод 1
do
{
X = readSensors(); // Присвоєння значення
digitalWrite(ledpin1, LOW); // Включити світлодіод 1

delay(1000); // Виконати паузу 1000 мсек


digitalWrite(ledpin1, HIGH); // Виключити світлодіод 1
delay(2000); // Виконати паузу 2000 мсек
}
while (х <50); // Продовження циклу, якщо х менший 50

You might also like