Ответы:
Они не конфликтуют, так как millis()
строго считывают непосредственное значение, TCNT0
тогда как ШИМ через таймер 0 использует способность оборудования сравнивать значение TCNT0
со значениями, OCR0x
не влияя на значение любого из них.
Просто чтобы добавить к ответу @ Игнасио, который прямо ответил на ваш вопрос. «Конфликт», о котором вы говорите, Timer0
связан с прескалером России.
По большей части вы можете использовать эти выводы (между прочим, контакты 5 и 6 в UNO) с ШИМ без проблем и прочитать правильное значение millis()
(а также получить ожидаемую задержку от delay
)
Проблемы возникают в том случае, если вы хотите изменить прескалер (обычно для изменения частоты сигнала ШИМ). Если вы измените это, то вы будете напрямую влиять на расчет, отчетность millis()
и продолжительность delay(x)
.
millis ()
или в delay ()
любом случае
millis()
просто использует счетчик переполнения таймера 0micros()
читает непосредственное значение вTCNT0
.