Таймери 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 структура програми для початківців

Уроки Arduino структура програми для початківців

Доброго дня, друзі! Вы великі молодці, що зацікавились уроками Arduino! Структура програми в Ardu..

Arduino SIM800 вхідний дзвінок

Arduino SIM800 вхідний дзвінок

Привіт фанам GSM автоматики! Підпишіться, щоб нічого не пропустити, і почнемо черговий випуск роботи..

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

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

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

304.49грн.

Orange PI автозапуск браузера на весь екран при увімкненні

Orange PI автозапуск браузера на весь екран при увімкненні

Вступне слово Основна ідея проекту - відображення вмісту нашого сайту на екрані телевізора. Це може..

Мотор-редуктор з колесом 66мм

Мотор-редуктор з колесом 66мм

Моторчик з пластмасовим редуктором для встановлення на роботизованих машинкахВ комплект входить коле..

111.67грн.