My modifications/additions to the code

Dependencies:   ADXL345 ADXL345_I2C IMUfilter ITG3200 Servo fishgait mbed-rtos mbed pixy_cam

Fork of robotic_fish_ver_4_8 by jetfishteam

Committer:
sandwich
Date:
Thu Jan 30 02:04:23 2014 +0000
Revision:
7:e005cfaff8d1
Parent:
6:a4d6f3e4bf28
removed rtos and added interrupt reading

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sandwich 5:090ef6275773 1 #include "PwmReader.h"
sandwich 5:090ef6275773 2
sandwich 5:090ef6275773 3 //Constructors
rkk 6:a4d6f3e4bf28 4 PwmReader::PwmReader(PinName pwmInPort, float min, float max)
sandwich 5:090ef6275773 5 {
rkk 6:a4d6f3e4bf28 6 if (min > max)
rkk 6:a4d6f3e4bf28 7 {
rkk 6:a4d6f3e4bf28 8 error("PwmReader min value greater than max value!");
rkk 6:a4d6f3e4bf28 9 }
rkk 6:a4d6f3e4bf28 10
sandwich 5:090ef6275773 11 di = new InterruptIn(pwmInPort);
rkk 6:a4d6f3e4bf28 12 pwmMin = min;
rkk 6:a4d6f3e4bf28 13 pwmMax = max;
sandwich 5:090ef6275773 14 lastRise = 0;
sandwich 5:090ef6275773 15 period = 0;
sandwich 5:090ef6275773 16 duty = 0.0;
sandwich 7:e005cfaff8d1 17 di->mode(PullDown);
sandwich 5:090ef6275773 18 di->rise(this,&PwmReader::pwmRise); // attach the address of the flip function to the rising edge
sandwich 5:090ef6275773 19 di->fall(this,&PwmReader::pwmFall);
sandwich 7:e005cfaff8d1 20
sandwich 7:e005cfaff8d1 21 t.start();
sandwich 5:090ef6275773 22 }
sandwich 5:090ef6275773 23
sandwich 5:090ef6275773 24 PwmReader::~PwmReader()
sandwich 5:090ef6275773 25 {
sandwich 5:090ef6275773 26 delete di;
sandwich 7:e005cfaff8d1 27 t.stop();
sandwich 5:090ef6275773 28 }
sandwich 5:090ef6275773 29
sandwich 5:090ef6275773 30 // public methods
sandwich 5:090ef6275773 31 float PwmReader::getDuty()
sandwich 5:090ef6275773 32 {
rkk 6:a4d6f3e4bf28 33 float smallDelta = (duty > pwmMin) ? (duty - pwmMin) : 0.0;
rkk 6:a4d6f3e4bf28 34 float dutyAdjusted = smallDelta / (pwmMax-pwmMin);
rkk 6:a4d6f3e4bf28 35 return dutyAdjusted;
sandwich 5:090ef6275773 36 }
sandwich 5:090ef6275773 37
sandwich 5:090ef6275773 38 // private methods
sandwich 5:090ef6275773 39 void PwmReader::pwmRise()
sandwich 5:090ef6275773 40 {
sandwich 5:090ef6275773 41 int rise = t.read_us();
sandwich 5:090ef6275773 42 if( (lastRise > 0) && (rise > lastRise) ) {
sandwich 5:090ef6275773 43 period = rise - lastRise;
sandwich 5:090ef6275773 44 }
sandwich 5:090ef6275773 45 lastRise = rise;
sandwich 5:090ef6275773 46
sandwich 5:090ef6275773 47 }
sandwich 5:090ef6275773 48
sandwich 5:090ef6275773 49 void PwmReader::pwmFall()
sandwich 5:090ef6275773 50 {
rkk 6:a4d6f3e4bf28 51 int fall = t.read_us();
sandwich 5:090ef6275773 52 if(period > 0 ) {
rkk 6:a4d6f3e4bf28 53 int delta = fall - lastRise;
rkk 6:a4d6f3e4bf28 54 duty = float(delta)/float(period);
sandwich 5:090ef6275773 55 }
sandwich 5:090ef6275773 56 }