Based the Library PwmIn by Simon Ford expanded with enable_irq and disable_irq for separate input signals. Program gives no real advantage above the original Library.
Diff: main.cpp
- Revision:
- 0:18d069b5f9f4
- Child:
- 1:4bd14d5374c3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Jan 01 12:25:57 2014 +0000 @@ -0,0 +1,88 @@ +#include "mbed.h" +#define NR 20 + +class PwmIn +{ +public: + PwmIn(PinName p); + float period(); + float pulsewidth(); + float dutycycle(); + +protected: + void rise(); + void fall(); + + InterruptIn _p; + Timer _t; + float _pulsewidth, _period; +}; + +PwmIn::PwmIn(PinName p) : _p(p) +{ + _p.rise(this, &PwmIn::rise); + _p.fall(this, &PwmIn::fall); + _period = 0.0; + _pulsewidth = 0.0; + _t.start(); +} + +PwmIn b(PTA17); // Sensor 1 Y direction +PwmIn d(PTA16); // Sensor 2 Y direction +Serial pc(USBTX, USBRX); // tx, rx + +float PwmIn::period() +{ + return _period; +} + +float PwmIn::pulsewidth() +{ + return _pulsewidth; +} + +float PwmIn::dutycycle() +{ + return _pulsewidth / _period; +} + +void PwmIn::rise() +{ + _period = _t.read(); + _t.reset(); +} + +void PwmIn::fall() +{ + _pulsewidth = _t.read(); +} + +struct product { + float pulse; + float width; + float duty; +} acc_a[NR], acc_b[NR], acc_c[NR],acc_d[NR]; + +int main() +{ + char pbuffer[60]="---"; + int i; + + while(1) { + //d.disable(); + for (i=0; i<NR; i++) { + acc_b[i].duty= b.dutycycle(); + //acc_d[i].duty= d.dutycycle(); + } + + for (i=0; i<NR; i++) { + //acc_b[i].duty= b.dutycycle(); + acc_d[i].duty= d.dutycycle(); + } + + for (i=0; i<NR; i++) { + sprintf(pbuffer, " b= %f, d= %f \n\r", acc_b[i].duty, acc_d[i].duty); + pc.puts(pbuffer); + } + } +}