// --- Configuration Constants ---
const int pwmPin = 13;
const int frequency = 5000;
const uint8_t resolution = 8; // 0-255 range
// --- Calculated Values ---
const uint32_t maxDutyCycle = (1 << resolution) - 1; // For 8-bit, this is 255
// --- Helper Function ---
// Converts a percentage (0-100) to the raw duty cycle value
uint32_t percentageToDuty(float percentage) {
// Clamp percentage
if (percentage < 0.0) {
percentage = 0.0;
} else if (percentage > 100.0) {
percentage = 100.0;
}
return (percentage / 100.0) * maxDutyCycle;
}
// ========================== SETUP ==========================
void setup() {
Serial.begin(115200);
Serial.println("ESP32 PWM with Percentage Control");
ledcAttach(pwmPin, frequency, resolution);
// Example: set 50% duty cycle using percentage
uint32_t duty = percentageToDuty(50.0);
ledcWrite(pwmPin, duty);
Serial.printf("Duty (raw): %u / %u\n", duty, maxDutyCycle);
}
// ========================== LOOP ==========================
void loop() {
delay(1000);
}