Функція analogWrite() - ШІМ

Документація

analogWrite() — ШІМ


Записує на пін аналогове значення (хвилю ШІМ). Може використовуватися для запалення світлодіода на різних рівнях яскравості або приводити в рух двигун на різних швидкостях. Після звернення до analogWrite() пін генеруватиме стабільний меандр визначеного робочого циклу до наступного виклику analogWrite() (чи звернення до digitalRead() або digitalWrite() на тому ж піні). Частота сигналів ШІМ на більшості пінів становить приблизно 490 Гц. На Uno та схожих платах піни 5 та 6 мають частоту близько 980 Гц. Піни 3 та 11 на Leonardo також працюють на частоті 980 Гц.

На більшості плат Arduino (на ATmega168 чи ATmega328) ця функція працює на пінах 3, 5, 6, 9, 10 та 11. На Arduino Mega вона працює на пінах 2-13 та 44-46. Старіші плати Arduino на ATmega8 підтримують analogWrite() лише на пінах 9, 10 та 11.

Arduino Due підтримує analogWrite() на пінах 2-13 та DAC0 і DAC1. На відміну від ШІМ-пінів, DAC0 і DAC1 є цифро-аналоговими перетворювачами і працюють як справжні аналогові виходи.

Вам не потрібно викликати pinMode(), щоб налаштувати піни на вихід перед зверненням до analogWrite().

Функція analogWrite не має нічого спільного з аналоговими пінами або функцією analogRead.

Синтаксис

analogWrite(пін, значення)

Параметри

пін: пін, на який слід записати значення

значення: робочий цикл: між 0 (завжди вимкнений) та 255 (завжди ввімкнений).

Повертає

нічого

Примітки і відомі проблеми

Виходи ШІМ, згенеровані на пінах 5 та 6 матимуть вищі, ніж очікується, робочі цикли. Це відбувається через взаємодію функцій millis() та delay(), які використовують той самий внутрішній таймер, що й для генерації цих ШІМ-виходів. Це буде помічено в основному на низьких налаштуваннях робочого циклу (наприклад, 0-10) і може призвести до значення 0 при неповному вимкненні виходу на пінах 5 та 6.

Приклад

Налаштовує вихід світлодіода пропорційно до значення, що зчитується з потенціометра.

int ledPin = 9;      // світлодіод підключено до цифрового піна 9

int analogPin = 3;   // потенціометр підключено до аналогового піна 3

int val = 0;         // змінна для зберігання зчитуваного значення


void setup()

{

  pinMode(ledPin, OUTPUT);   // налаштовує піни як вихід

}



void loop()

{

  val = analogRead(analogPin);   // зчитувати вхідний пін

  analogWrite(ledPin, val / 4);  // значення analogRead від 0 до 1023, analogWrite - від 0 до 255

}


Повернутись до головної

Коментарі 0

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.