diff --git a/sound_pwm.cpp b/sound_pwm.cpp index 471e099..d032880 100644 --- a/sound_pwm.cpp +++ b/sound_pwm.cpp @@ -40,28 +40,32 @@ void PWM::set_freq(unsigned freq) { ESP_ERROR_CHECK(::ledc_set_freq(SPEED_MODE, TIMER, freq)); } -#elif defined(PWM_SOUND) -static unsigned pin; +#elif defined(ESP8266) +#include + +static unsigned gpio, duty; +const unsigned period = 1024; void PWM::begin(unsigned gpio) { - pin = gpio; - analogWriteRange(PWM_TOP); + ::gpio = gpio; + pinMode(gpio, OUTPUT); } void PWM::set_duty(unsigned duty) { - analogWrite(pin, duty); + ::duty = duty; } void PWM::stop() { - analogWrite(pin, 0); + stopWaveform(gpio); } void PWM::set_freq(unsigned freq) { - analogWriteFreq(freq); + uint32_t t = 1000000 / freq; + uint32_t h = duty * t / period; + startWaveform(gpio, h, t-h, 0); } #else - void PWM::begin(unsigned gpio) { }