Таймери Arduino UNO — Частина 1. Вступ

Теорія

Що таке таймер у мікроконтролері ATmega328P

Таймер — це вбудований апаратний модуль мікроконтролера, який рахує такти від внутрішнього або зовнішнього джерела тактових імпульсів. Таймери використовуються для вимірювання часу, створення точних затримок, генерації сигналів ШІМ (PWM) та роботи з перериваннями.

Апаратні та програмні таймери

  • Апаратні таймери — реалізовані на рівні мікросхеми. Працюють незалежно від основного коду та можуть виконувати завдання у фоні. Забезпечують високу точність.
  • Програмні таймери — реалізовані у вигляді функцій та бібліотек (наприклад, на основі millis()). Менш точні, залежать від виконання іншого коду.

Відмінність delay() / millis() від апаратних таймерів

Функція delay() блокує виконання програми, зупиняючи її на заданий час. Це просто «пауза» в коді.

millis() і micros() використовують апаратний таймер (Timer0) для підрахунку часу, але не блокують виконання коду. З їх допомогою можна вимірювати інтервали часу та створювати неблокуючу логіку.

Огляд трьох таймерів Arduino UNO

  • Timer0 — 8-бітний, використовується для роботи функцій millis(), micros(), delay(), а також ШІМ на пінах D5 і D6.
  • Timer1 — 16-бітний, підходить для точних вимірювань часу, роботи сервоприводів, генерації повільних ШІМ-сигналів.
  • Timer2 — 8-бітний, може працювати від окремого тактового джерела, використовується для генерації звуку та керування ШІМ на пінах D3 і D11.

Практика

Вимірювання часу за допомогою millis() і micros()


// Приклад вимірювання інтервалу в мілісекундах
unsigned long startTime;
void setup() {
  Serial.begin(9600);
  startTime = millis();
}
void loop() {
  if (millis() - startTime >= 1000) { // Пройшла 1 секунда
    Serial.println("Пройшла секунда");
    startTime = millis(); // Скидання таймера
  }
}
  

Простий приклад блимання світлодіода без delay()


const int ledPin = 13;
unsigned long previousMillis = 0;
const long interval = 500; // Інтервал блимання (мс)

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    digitalWrite(ledPin, !digitalRead(ledPin)); // Перемикаємо стан LED
  }
}
  

Проєкт: Блимання LED з різними інтервалами без затримок

У цьому проєкті ми зробимо блимання світлодіода, де кожне наступне блимання відбуватиметься швидше або повільніше залежно від заданого алгоритму.


const int ledPin = 13;
unsigned long previousMillis = 0;
long interval = 1000; // Початковий інтервал (мс)

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    digitalWrite(ledPin, !digitalRead(ledPin));

    // Змінюємо інтервал
    interval -= 100;
    if (interval < 100) interval = 1000; // Скидання до початкового значення
  }
}
  

Таким чином, ми використали millis() замість delay(), щоб уникнути блокування програми та отримати гнучке керування часом.

<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Калькулятори для електронщиків та радіоаматорів

Калькулятори для електронщиків та радіоаматорів

Онлайн-калькулятори для розрахунку напруги, струму, опору, дільника напруги, резистора для світлодіо..

BMS плата захисту 3х літій-іонних акумуляторів 10А

BMS плата захисту 3х літій-іонних акумуляторів 10А

Модуль захисту батареї трьох літій-іонних акумуляторівНапруга відсічення при заряді 4,25...4,35ВНапр..

114.46грн.

Електронний термостат на нагрів або охолодження

Електронний термостат на нагрів або охолодження

ОписПрограмований терморегулятор призначений для контролю температури в діапазоні від -50 °С до +110..

186.45грн.

Arduino NRF24L01 емулятор клавіатури та миші

Arduino NRF24L01 емулятор клавіатури та миші

Завдання проекту – віддалене управління 20 комп'ютерами з одного головного комп'ютера. Під керування..

Термінальний модуль для Wemos D1 mini

Термінальний модуль для Wemos D1 mini

Модуль для встановлення Wemos D1 mini з гвинтовими клемниками.Містить вихід шини I2C, нормалізований..

162.43грн.