Output PWM on any pin. Partly based on SoftPWM with some improvements
SoftPwmOut.h@0:813ee8141cdd, 2015-09-03 (annotated)
- 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?
User | Revision | Line number | New 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 |