Jared DiCarlo
/
foc-ed_in_the_bot_compact
working version
Fork of foc-ed_in_the_bot_compact by
Diff: pwm_in.cpp
- Revision:
- 13:41d102a53caf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pwm_in.cpp Sun Oct 30 02:06:03 2016 +0000 @@ -0,0 +1,56 @@ +#include "pwm_in.h" +#include "mbed.h" + +float map(float x, float in_min, float in_max, float out_min, float out_max) +{ + return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; +} + +float constrain(float in, float min, float max) +{ + if(in > max) return max; + if(in < min) return min; + return in; +} + +PWM_IN::PWM_IN(PinName pin, int usec_min, int usec_max) +{ + int_in = new InterruptIn(pin); + dig_in = new DigitalIn(pin); + int_in->rise(this, &PWM_IN::handle_rise); + int_in->fall(this, &PWM_IN::handle_fall); + this->usec_min = usec_min; + this->usec_max = usec_max; +} + + +bool PWM_IN::get_enabled() +{ + return enabled; +} + +void PWM_IN::handle_rise() +{ + enabled = true; + timer.stop(); + timer.reset(); + timer.start(); + was_on = true; +} + +void PWM_IN::handle_fall() +{ + was_on = false; + usecs = timer.read_us(); + timer.stop(); + timer.reset(); + timer.start(); +} + +float PWM_IN::get_throttle() +{ + if(timer.read_us() > 40000) enabled = false; + if(!enabled) return -1; + return constrain(map((float)usecs, usec_min, usec_max, 0, 1), 0, 1); +} +