An interface to read a PWM input signal, using InterruptIn

Dependents:   PwmIn_HelloWorld PwmIn_ModSerial CHR6dm_reading tugboat ... more

Committer:
simon
Date:
Wed Feb 17 18:32:34 2010 +0000
Revision:
0:2d3d93d7b204

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }