У нашій першій вправі між вмиканням і вимиканням світлодіода була секундна затримка, для цього ми використали функцію delay(), яка призупиняє роботу контролера, отже він не може виконувати інші команди в головній функції loop ()

Спочатку зробимо код скетчу більш компактним, замінивши 2 пари рядків на одну пару. Замість встановлення значення в
HIGH, а потім назад в LOW, ми отримаємо поточне значення ledPin і інвертуємо його. Тобто якщо воно було HIGH, то стане LOW і навпаки : digitalWrite(ledPin, !digitalRead(ledPin));

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

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

У нашому скетчі ми будемо використовувати функцію
millis(). У даному прикладі ми ввели дві змінні - currentTime і loopTime , змінна currentTime кожен раз оновлюється, коли currentTime більше ніж loopTime на 1 секунду, тобто (loopTime + 1000), то команда digitalWrite(ledPin,!digitalRead(ledPin)) змінює стан світлодіода, а змінній loopTime присвоюється поточне значення currentTime.
/* Моргаємо світлодіодом з функціями таймінгу (керування часом)*/ 
int ledPin = 13; // LED приєднано до вивода 13 
unsigned long currentTime; 
unsigned long loopTime; 
void setup() { 
 pinMode(ledPin, OUTPUT); // налаштовуємо вивід 13 як вихід 
 currentTime = millis();  // зчитуємо час з моменту запуску 
 loopTime = currentTime; 
} 
void loop() { 
 currentTime = millis(); // зчитуємо час з моменту запуску  програми 
 if(currentTime >= (loopTime + 1000)){ //порівнюємо поточний час зі змінною loopTime + 1 секунда
  digitalWrite(ledPin, !digitalRead(ledPin)); // перемикаємо  LED 
 loopTime = currentTime; // в loopTime записуємо нове значення часу 
    }
 // А тут можуть бути інші команди 
} 




- Copyright © Основи мікроелектроніки в школі