From b0896bbb427467b39f41606259b20a914d084dbb Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Wed, 30 Sep 2020 13:08:40 +0200 Subject: [PATCH] analogWrite with negative value to delete pwm objects --- cores/arduino/wiring_analog.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/cores/arduino/wiring_analog.cpp b/cores/arduino/wiring_analog.cpp index ab4cd928..328ed8fd 100644 --- a/cores/arduino/wiring_analog.cpp +++ b/cores/arduino/wiring_analog.cpp @@ -45,14 +45,22 @@ void analogWrite(pin_size_t pin, int val) if (pin >= PINS_COUNT) { return; } - float percent = (float)val/(float)((1 << write_resolution)-1); mbed::PwmOut* pwm = digitalPinToPwm(pin); - if (pwm == NULL) { + if ((pwm == NULL) && (val > 0)) { pwm = new mbed::PwmOut(digitalPinToPinName(pin)); digitalPinToPwm(pin) = pwm; pwm->period_ms(2); //500Hz + float percent = (float)val/(float)((1 << write_resolution)-1); + pwm->write(percent); + } + else if ((pwm != NULL) && (val < 0)) { + delete pwm; + digitalPinToPwm(pin) = NULL; + } + else if ((pwm != NULL) && (val > 0)) { + float percent = (float)val/(float)((1 << write_resolution)-1); + pwm->write(percent); } - pwm->write(percent); } void analogWriteResolution(int bits)