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:
0:76861123625b
Child:
1:386d04fe1e37
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SlowPWM.h	Tue Jun 18 10:52:51 2019 +0000
@@ -0,0 +1,43 @@
+#ifndef __slowPWM.h__
+#define __slowPWM.h__ 
+ 
+#include "mbed.h"
+class slowPWM : public DigitalOut
+{
+public:
+ 
+// constructor without setting anything going.
+    slowPWM( const PinName pin);
+ 
+// constructor that also starts things running
+    slowPWM( float period, float highTime, const PinName pin );
+ 
+// set the period
+    void setPeriod(float period);
+ 
+// set the on time per cycle
+    void setHighTime(float highTime);
+
+// set the on time per cycle as a fraction
+    void setDutyCycle(float cycle);
+
+ 
+// stop things. If output is high it will still turn low at the correct time
+    void stop();
+ 
+// start things
+    void start();
+ 
+private:
+// internal functions and variables not visible to the outside world
+ 
+    void onTurnOff(void);
+    void onCycleStart(void);
+ 
+    Ticker cycleTimer;
+    Timeout offTimer;
+ 
+    float _timeOn;
+    float _repeatTime;
+};
+#endif