Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Микроконтроллеры ESP32 не поддерживают стандартную функцию Arduino analogWrite() для управления широтно-импульсной модуляции (ШИМ). Вместо неё предусмотрены другие функции, которые мы рассмотрим.
Плата поддерживает независимых 16 каналов (от 0 до 15), которые можно настроить на генерирование ШИМ-сигналов с различными свойствами. Вам нужно выбрать любой из них. Затем следует выбрать частоту ШИМ-сигнала, для светодиодов подойдут значения 5000Гц, 10 000Гц. Ещё один важный параметр - разрешение от 1 до 16 бит, для значений от 0 до 256 требуется 8-битное разрешение. Когда определились со всеми параметрами, осталось выбрать номер вывода.
Примеры использования показаны в статьях.
M5Stack. PWM. Изменяем яркость светодиода
// номера портов для светодиодов
const int ledPin1 = 16;
const int ledPin2 = 17;
const int ledPin3 = 5;
// задаём свойства ШИМ-сигнала
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
ledcSetup(ledChannel, freq, resolution);
// привязываем канал к портам светодиодов
ledcAttachPin(ledPin1, ledChannel);
ledcAttachPin(ledPin2, ledChannel);
ledcAttachPin(ledPin3, ledChannel);
}
void loop(){
// увеличиваем яркость светодиода
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// меняем яркость светодиода
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
// уменьшаем яркость светодиода
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// меняем яркость светодиода при помощи ШИМ:
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}