Таймери 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Припой з каніфоллю 0,5мм 30г

Припой з каніфоллю 0,5мм 30г

Нитка припою для тонкої пайки мілких радіодеталей, що містить флюсСвинця 40 %Олова 60 %Флюса 1,2 %На..

211.57грн.

Модуль блока живлення 5В 1А

Модуль блока живлення 5В 1А

Плата модуля імпульсного блока живлення 5В 1АВхідна змінна напруга 85 ... 265 В 50/60 ГцРозміри плат..

128.59грн.

Модуль реле одноканальний 5В 10А

Модуль реле одноканальний 5В 10А

Одноканальный модуль реле для підключення напряму до дискретного виходу контролера. Світлодіодна інд..

43.11грн.

Налаштування струму драйвера A4988

Налаштування струму драйвера A4988

Мікросхеми - драйвера крокових двигунів такі, як A4988, відрізняються від звичайних H-мостів, або по..

Цифровий датчик температури та вологості DHT11

Цифровий датчик температури та вологості DHT11

Вимірювання відносної вологості в межах 20 ... 90 %Точність вимірювання вологості ± 5,0 %RHВимірюван..

59.29грн.