Звернемося до першого уроку. де ми управляли LED. Між включенням і вимиканням якого була секундна затримка.
У використовуваної там програмою (див. Код нижче) був один дуже великий недолік. Для витримки паузи між вкл / викл LED в 1 сек. нами була використана функція delay (). В цей час контролер не може виконувати інші команди в головній функції loop ()
Перше, що ми зробимо, це внесемо невеликі коректування в функцію loop (). Щоб зробити код більш компактним і витонченим, замінимо 2 пари рядків на одну пару. Замість установки значення в HIGH, а потім назад в LOW, ми отримаємо поточне значення ledPin і проінвертіруем його. Тобто якщо воно було HIGH, то стане LOW і навпаки.
Відмінно! Тепер ми вдосконалюємо функцію delay (). Замість цього, ми будемо використовувати функцію millis (). Ця функція повертає кількість мілісекунд, що минув з моменту запуску поточної програми. Функція переповниться (повернеться в нуль) приблизно через 50 діб роботи програми.
Альтернативною функцією є micros (). яка повертає кількість мікросекунд, що минув з моменту запуску поточної програми. Функція переповниться (повернеться в нуль) приблизно через 70 хвилин роботи програми.
У нашому уроці ми будемо використовувати функцію millis ():
В даному прикладі ми ввели дві додаткові змінні currentTime і loopTime. У функції setup () обидві змінні мають одне і теж значення. У функції loop (). змінна currentTime кожен раз оновлюється в циклі. Коли currentTime більше ніж loopTime на 1 секунду (loopTime +1000), то LED змінює свій стан, а змінної loopTime присвоюється поточне значення currentTime.
Зверніть увагу, що в даному прикладі ми не використали функцію delay () і процесор може виконувати інші операції.