Таймери 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Джойстик шилд для Arduino UNO MEGA

Джойстик шилд для Arduino UNO MEGA

Шилд джойстика для контролерів Arduino UNO та MEGAМожна використовувати для саморобних ігор, а також..

176.49грн.

HX711 — модуль контролера ваги для Arduino

HX711 — модуль контролера ваги для Arduino

HX711 — це спеціалізований модуль для підключення тензометричних датчиків (датчиків ваги) до мікроко..

38.08грн.

Твердотільне реле 10А

Твердотільне реле 10А

Реле без механічних контактів на 10 А. Силовим елементом даного реле є симистор.Гальванічна розв'язк..

281.48грн.

LED драйвер 330/660мА з PWM управлінням

LED драйвер 330/660мА з PWM управлінням

LED драйвер 330/660 мА з ШІМ Драйвер для потужних світлодіодів і світлодіодних світильників на ..

121.15грн.

Підключення крокового двигуна

Підключення крокового двигуна

Привіт друзі! Пропоную вам практичний алгоритм, як правильно підключити обмотки крокового двигуна ..