An interface to read a PWM input signal, using InterruptIn
Dependents: PwmIn_HelloWorld PwmIn_ModSerial CHR6dm_reading tugboat ... more
main.cpp@0:2d3d93d7b204, 2010-02-17 (annotated)
- Committer:
- simon
- Date:
- Wed Feb 17 18:32:34 2010 +0000
- Revision:
- 0:2d3d93d7b204
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
simon | 0:2d3d93d7b204 | 1 | // Example PwmIn class to detect PWM inputs, sford |
simon | 0:2d3d93d7b204 | 2 | // - Note: uses InterruptIn, so not available on p19/p20 |
simon | 0:2d3d93d7b204 | 3 | |
simon | 0:2d3d93d7b204 | 4 | #include "mbed.h" |
simon | 0:2d3d93d7b204 | 5 | |
simon | 0:2d3d93d7b204 | 6 | class PwmIn { |
simon | 0:2d3d93d7b204 | 7 | public: |
simon | 0:2d3d93d7b204 | 8 | PwmIn(PinName p) : _p(p) { |
simon | 0:2d3d93d7b204 | 9 | _p.rise(this, &PwmIn::rise); |
simon | 0:2d3d93d7b204 | 10 | _p.fall(this, &PwmIn::fall); |
simon | 0:2d3d93d7b204 | 11 | _period = 0.0; |
simon | 0:2d3d93d7b204 | 12 | _pulsewidth = 0.0; |
simon | 0:2d3d93d7b204 | 13 | _t.start(); |
simon | 0:2d3d93d7b204 | 14 | } |
simon | 0:2d3d93d7b204 | 15 | |
simon | 0:2d3d93d7b204 | 16 | void rise() { |
simon | 0:2d3d93d7b204 | 17 | _period = _t.read(); |
simon | 0:2d3d93d7b204 | 18 | _t.reset(); |
simon | 0:2d3d93d7b204 | 19 | } |
simon | 0:2d3d93d7b204 | 20 | |
simon | 0:2d3d93d7b204 | 21 | void fall() { |
simon | 0:2d3d93d7b204 | 22 | _pulsewidth = _t.read(); |
simon | 0:2d3d93d7b204 | 23 | } |
simon | 0:2d3d93d7b204 | 24 | |
simon | 0:2d3d93d7b204 | 25 | float period() { return _period; } |
simon | 0:2d3d93d7b204 | 26 | float pulsewidth() { return _pulsewidth; } |
simon | 0:2d3d93d7b204 | 27 | float dutycycle() { return _pulsewidth / _period; } |
simon | 0:2d3d93d7b204 | 28 | |
simon | 0:2d3d93d7b204 | 29 | protected: |
simon | 0:2d3d93d7b204 | 30 | InterruptIn _p; |
simon | 0:2d3d93d7b204 | 31 | Timer _t; |
simon | 0:2d3d93d7b204 | 32 | float _pulsewidth, _period; |
simon | 0:2d3d93d7b204 | 33 | }; |
simon | 0:2d3d93d7b204 | 34 | |
simon | 0:2d3d93d7b204 | 35 | PwmOut x(p21); |
simon | 0:2d3d93d7b204 | 36 | PwmOut y(p22); |
simon | 0:2d3d93d7b204 | 37 | |
simon | 0:2d3d93d7b204 | 38 | PwmIn a(p5); |
simon | 0:2d3d93d7b204 | 39 | PwmIn b(p6); |
simon | 0:2d3d93d7b204 | 40 | |
simon | 0:2d3d93d7b204 | 41 | int main() { |
simon | 0:2d3d93d7b204 | 42 | x = 0.5; |
simon | 0:2d3d93d7b204 | 43 | y = 0.2; |
simon | 0:2d3d93d7b204 | 44 | while(1) { |
simon | 0:2d3d93d7b204 | 45 | printf("a: pw = %f, period = %f\n", a.pulsewidth(), a.period()); |
simon | 0:2d3d93d7b204 | 46 | printf("b: pw = %f, period = %f\n", b.pulsewidth(), b.period()); |
simon | 0:2d3d93d7b204 | 47 | wait(2); |
simon | 0:2d3d93d7b204 | 48 | } |
simon | 0:2d3d93d7b204 | 49 | } |