This Library allows you to use any pin on the mbed micro as PWM out. It also allows the user to update the Period and Pulse width in realtime.
Diff: PwmOutAny.cpp
- Revision:
- 0:9eb94736e774
diff -r 000000000000 -r 9eb94736e774 PwmOutAny.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PwmOutAny.cpp Sun Dec 08 19:04:44 2013 +0000 @@ -0,0 +1,49 @@ +#include "PwmOutAny.h" + +float _period; +float _PercentHigh; + +PwmOutAny::PwmOutAny(PinName pin1, float Period, float PercentHigh):_PwmOut(pin1) +{ + _period=Period; + _PercentHigh=PercentHigh ; + _PwmTicker.attach(this,&PwmOutAny::TickerFlipper,_period/2); +} + +void PwmOutAny::TickerFlipper() +{ + static float CurrentPeriod; + if(!_PwmOut) + { + _PwmTicker.detach(); + _PwmTicker.attach(this,&PwmOutAny::TickerFlipper,CurrentPeriod*(_PercentHigh)); + _PwmOut = true; + } + else + { + CurrentPeriod = _period; + _PwmTicker.detach(); + _PwmTicker.attach(this,&PwmOutAny::TickerFlipper,CurrentPeriod*(1.0-_PercentHigh)); + _PwmOut = false; + } +} + + + float PwmOutAny::Get_PulseWidth() +{ + return (_PercentHigh); + +} + void PwmOutAny::Set_PulseWidth(float PW) +{ + _PercentHigh = PW; +} + float PwmOutAny::Get_Period() +{ + return _period; +} + void PwmOutAny::Set_Period(float ChangePeriod) +{ + _period = ChangePeriod; +} +