Відповіді:
Вони не конфліктують, оскільки millis()
суворо читає безпосереднє значення, TCNT0
тоді як ШІМ через таймер 0 використовує можливість апаратного забезпечення порівняти значення TCNT0
зі значеннями, OCR0x
не впливаючи на значення жодного з них.
Просто додати до відповіді @ Ignacio, яка безпосередньо відповіла на ваше запитання. "Конфлікт", про який ви говорите, пов'язаний Timer0
з дошкільником.
Здебільшого ви можете користуватися цими штифтами (до речі, штифтами 5 і 6 в UNO) з ШІМ без проблем і читати правильне значення millis()
(а також отримувати очікуване затримку від delay
)
Якщо у вас виникли проблеми, якщо ви хочете змінити дошкільник (зазвичай, щоб змінити частоту ШІМ-сигналу). Якщо ви зміните це, ви безпосередньо вплинете на обчислення та звітність millis()
та тривалість delay(x)
.
millis ()
або в delay ()
будь-якому випадку
millis()
просто використовує кількість переливів Таймера 0.micros()
читає безпосереднє значення вTCNT0
.