Very simple class to give slow speed PWM using timers and digital out.

Example use...

#include "SlowPWM.h"
SlowPWM MyTimer1(LED1);
SlowPWM MyTimer2(LED2);
SlowPWM MyTimer3(LED3);

main()
{
    MyTimer1.setPeriod(4);
    MyTimer1.setHighTime(2);
    MyTimer1.start();
    MyTimer2.setPeriod(2);
    MyTimer2.setHighTime(1.5);
    MyTimer2.start();
    MyTimer3.setPeriod(3.8);
    MyTimer3.setHighTime(1.5);
    MyTimer3.start();
    while(true) {
        wait(1);
    }
}
Revision:
1:386d04fe1e37
Parent:
0:76861123625b
Child:
2:c90e2d2f52aa
--- a/SlowPWM.cpp	Tue Jun 18 10:52:51 2019 +0000
+++ b/SlowPWM.cpp	Tue Jun 18 16:22:56 2019 +0000
@@ -1,19 +1,19 @@
-#include "slowPWM.h"
+#include "SlowPWM.h"
  
-slowPWM::slowPWM(const PinName pin ):DigitalOut(pin)
+SlowPWM::SlowPWM(const PinName pin ):DigitalOut(pin)
 {
     _repeatTime=1;
     _timeOn=0.5f;
 }
  
-slowPWM::slowPWM( float period, float highTime, const PinName pin ):DigitalOut(pin)
+SlowPWM::SlowPWM( float period, float highTime, const PinName pin ):DigitalOut(pin)
 {
     setPeriod(period);
     setHighTime(highTime);
     start();
 }
  
-void slowPWM::setPeriod(float period)
+void SlowPWM::setPeriod(float period)
 {
     _repeatTime = period;
     if (_repeatTime <= 0)   // check it's not 0 or negative
@@ -21,39 +21,39 @@
     setHighTime(_timeOn);  // perform sanity check on high time
 }
  
-void slowPWM::setHighTime(float highTime)
+void SlowPWM::setHighTime(float highTime)
 {
     _timeOn = highTime;
     if (_timeOn >= _repeatTime)  // check it's not more than the cycle time.
         _timeOn = _repeatTime/2; // set to 50% if invalid 
 }
  
-void slowPWM::setDutyCycle(float cycle) {
+void SlowPWM::setDutyCycle(float cycle) {
         if ((cycle >=0) && (cycle <=1)) {
         _timeOn = _repeatTime*cycle; 
         } else
         _timeOn = _repeatTime/2; // set to 50% if invalid 
 }
  
-void slowPWM::stop()
+void SlowPWM::stop()
 {
     cycleTimer.detach();
 }
  
 // start things.
-void slowPWM::start()
+void SlowPWM::start()
 {
-    cycleTimer.attach(callback(this,&slowPWM::onCycleStart),_repeatTime);
+    cycleTimer.attach(callback(this,&SlowPWM::onCycleStart),_repeatTime);
     onCycleStart();
 }
  
-void slowPWM::onTurnOff(void)
+void SlowPWM::onTurnOff(void)
 {
     write(0);
 }
  
-void slowPWM::onCycleStart(void)
+void SlowPWM::onCycleStart(void)
 {
-    offTimer.attach(callback(this,&slowPWM::onTurnOff),_timeOn);
+    offTimer.attach(callback(this,&SlowPWM::onTurnOff),_timeOn);
     write(1);
 }