Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Микроконтроллеры ESP32 не поддерживают стандартную функцию Arduino analogWrite() для управления широтно-импульсной модуляции (ШИМ). Вместо неё предусмотрены другие функции.
Схема для скетча: соединяем светодиод к порту 21 через резистор, второй вывод идёт к выводу GND. Нажатием кнопок A и B уменьшаем или увеличиваем яркость светодиода. Величину яркости выводим на экран.
#include <M5Stack.h>
int pwmChannel = 1; // канал
int frequency = 5000; // частота
int resolution = 8; // от 0 до 256
int ledPin = 21; // номер вывода
int ledState = 0; // текущее значение яркости светодиода
void setup() {
M5.begin();
M5.Lcd.setTextSize(3);
ledcSetup(pwmChannel, frequency, resolution); // устанавливаем все параметры
ledcAttachPin(ledPin, pwmChannel); // присоединяемся к выбранному порту
pinMode(ledPin, OUTPUT);
}
void loop() {
// При нажатии второй кнопки яркость увеличиваем
if (M5.BtnB.isPressed()) {
ledState += 5;
if (ledState > 250) {
ledState = 255;
}
M5.Lcd.clear();
M5.Lcd.setCursor(0, 30);
M5.Lcd.print(ledState);
ledcWrite(pwmChannel, ledState);
delay(200);
}
// при нажатии первой кнопки яркость уменьшаем
if (M5.BtnA.isPressed()) {
ledState -= 5;
if (ledState < 5) {
ledState = 0;
}
M5.Lcd.clear();
M5.Lcd.setCursor(0, 30);
M5.Lcd.print(ledState);
ledcWrite(pwmChannel, ledState);
delay(200);
}
M5.update();
}