Працюємо з 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Набір датчиків ваги 200кг

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

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

139.65грн.

Цифровий мультиметр DT9205A

Цифровий мультиметр DT9205A

Мультиметр - многофункціональний електровимірювальний прилад, що суміщує в одному корпусі основний ф..

288.99грн.

Озвучка тира Arduino Nano и MP3-проигрыватель

Озвучка тира Arduino Nano и MP3-проигрыватель

Постановка задачіЗадачею проекту являється виготовлення пристрою озвучення пострілів 6-ти одиниць зб..

Шилд акумулятора для WeMos D1

Шилд акумулятора для WeMos D1

Шилд для живлення мікроконтролера WeMos D1 від літієвого акумулятора. Дозволяє заряджати а..

45.66грн.

Гребінка з'єднувальна гольчата 2,54мм мама під пайку 10pin

Гребінка з'єднувальна гольчата 2,54мм мама під пайку 10pin

Гребінка 2,54мм для организації багатоповерхових плат на 10 пінівВикористовується в шилдах, що встан..

6.34грн.