Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

M5Stack. PWM. Изменяем яркость светодиода

Микроконтроллеры ESP32 не поддерживают стандартную функцию Arduino analogWrite() для управления широтно-импульсной модуляции (ШИМ). Вместо неё предусмотрены другие функции.

Схема для скетча: соединяем светодиод к порту 21 через резистор, второй вывод идёт к выводу GND. Нажатием кнопок A и B уменьшаем или увеличиваем яркость светодиода. Величину яркости выводим на экран.

PWM

#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();
}

Дополнительные материалы

Реклама