Output PWM on any pin. Partly based on SoftPWM with some improvements

Committer:
gagarcr
Date:
Thu Sep 03 08:15:34 2015 +0000
Revision:
0:813ee8141cdd
Intial version based on SoftPWM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gagarcr 0:813ee8141cdd 1 #ifndef SoftPWM_H
gagarcr 0:813ee8141cdd 2 #define SoftPWM_H
gagarcr 0:813ee8141cdd 3 #define POSITIVE true
gagarcr 0:813ee8141cdd 4 #define NEGATIVE false
gagarcr 0:813ee8141cdd 5
gagarcr 0:813ee8141cdd 6 #include "mbed.h"
gagarcr 0:813ee8141cdd 7
gagarcr 0:813ee8141cdd 8 class SoftPwmOut
gagarcr 0:813ee8141cdd 9 {
gagarcr 0:813ee8141cdd 10 public:
gagarcr 0:813ee8141cdd 11 SoftPwmOut(PinName);
gagarcr 0:813ee8141cdd 12 // void attach_us(int);
gagarcr 0:813ee8141cdd 13 void start();
gagarcr 0:813ee8141cdd 14 void write(float);
gagarcr 0:813ee8141cdd 15 float read();
gagarcr 0:813ee8141cdd 16 void pulsewidth(float);
gagarcr 0:813ee8141cdd 17 void pulsewidth_ms(int);
gagarcr 0:813ee8141cdd 18 void pulsewidth_us(int);
gagarcr 0:813ee8141cdd 19 void period(float);
gagarcr 0:813ee8141cdd 20 void period_ms(int);
gagarcr 0:813ee8141cdd 21 void period_us(int);
gagarcr 0:813ee8141cdd 22 void stop();
gagarcr 0:813ee8141cdd 23 operator float() {
gagarcr 0:813ee8141cdd 24 if ( _width <= 0.0 ) return 0.0;
gagarcr 0:813ee8141cdd 25 if ( _width > 1.0 ) return 1.0;
gagarcr 0:813ee8141cdd 26 return _width / _interval;
gagarcr 0:813ee8141cdd 27 }
gagarcr 0:813ee8141cdd 28 SoftPwmOut& operator=(float duty) {
gagarcr 0:813ee8141cdd 29 _width = _interval * duty;
gagarcr 0:813ee8141cdd 30 if ( duty <= 0.0 ) _width = 0.0;
gagarcr 0:813ee8141cdd 31 if ( duty > 1.0 ) _width = _interval;
gagarcr 0:813ee8141cdd 32 return *this;
gagarcr 0:813ee8141cdd 33 }
gagarcr 0:813ee8141cdd 34
gagarcr 0:813ee8141cdd 35 private:
gagarcr 0:813ee8141cdd 36 Timeout _timeout;
gagarcr 0:813ee8141cdd 37 Ticker _ticker;
gagarcr 0:813ee8141cdd 38 void TickerInterrupt();
gagarcr 0:813ee8141cdd 39 void end();
gagarcr 0:813ee8141cdd 40 DigitalOut _outPin;
gagarcr 0:813ee8141cdd 41 float _width;
gagarcr 0:813ee8141cdd 42 float _interval;
gagarcr 0:813ee8141cdd 43
gagarcr 0:813ee8141cdd 44 };
gagarcr 0:813ee8141cdd 45 #endif