robot

Dependencies:   FastPWM3 mbed

Committer:
bwang
Date:
Thu May 04 17:35:10 2017 +0000
Revision:
155:7c6005933d4c
Parent:
151:5bbb15351798
Child:
221:1e607c8d7d76
05/04/2017 13:34 - changed logic in PwmIn::handle_fall, which no longer resets timer on invalid edges

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bwang 19:a6cf15f89f3d 1 #include "mbed.h"
bwang 18:3863ca45cf26 2 #include "PwmIn.h"
bwang 19:a6cf15f89f3d 3 #include "MathHelpers.h"
dicarloj 13:41d102a53caf 4
bwang 151:5bbb15351798 5 PwmIn::PwmIn(PinName pin, int usec_min, int usec_max)
dicarloj 13:41d102a53caf 6 {
dicarloj 13:41d102a53caf 7 int_in = new InterruptIn(pin);
dicarloj 13:41d102a53caf 8 dig_in = new DigitalIn(pin);
bwang 16:f283d6032fe5 9 int_in->rise(this, &PwmIn::handle_rise);
bwang 16:f283d6032fe5 10 int_in->fall(this, &PwmIn::handle_fall);
dicarloj 13:41d102a53caf 11 this->usec_min = usec_min;
dicarloj 13:41d102a53caf 12 this->usec_max = usec_max;
bwang 75:591556ce033d 13
bwang 75:591556ce033d 14 usecs = usec_min;
bwang 75:591556ce033d 15 blocked = false;
bwang 75:591556ce033d 16 enabled = false;
bwang 92:a9dac72d8cac 17 risen = false;
dicarloj 13:41d102a53caf 18 }
dicarloj 13:41d102a53caf 19
dicarloj 13:41d102a53caf 20
bwang 16:f283d6032fe5 21 bool PwmIn::get_enabled()
dicarloj 13:41d102a53caf 22 {
dicarloj 13:41d102a53caf 23 return enabled;
dicarloj 13:41d102a53caf 24 }
dicarloj 13:41d102a53caf 25
bwang 16:f283d6032fe5 26 void PwmIn::handle_rise()
dicarloj 13:41d102a53caf 27 {
bwang 137:54c47ef47bbb 28 if (!enabled) {
bwang 137:54c47ef47bbb 29 enabled = true;
bwang 138:7ff70cef8db3 30 usecs = usec_min;
bwang 137:54c47ef47bbb 31 }
bwang 92:a9dac72d8cac 32 risen = true;
bwang 75:591556ce033d 33
dicarloj 13:41d102a53caf 34 timer.stop();
dicarloj 13:41d102a53caf 35 timer.reset();
dicarloj 13:41d102a53caf 36 timer.start();
dicarloj 13:41d102a53caf 37 }
dicarloj 13:41d102a53caf 38
bwang 16:f283d6032fe5 39 void PwmIn::handle_fall()
dicarloj 13:41d102a53caf 40 {
bwang 155:7c6005933d4c 41 if (!risen) return;
bwang 155:7c6005933d4c 42 risen = false;
bwang 155:7c6005933d4c 43
bwang 155:7c6005933d4c 44 if (blocked) {
bwang 155:7c6005933d4c 45 blocked = false;;
bwang 155:7c6005933d4c 46 return;
bwang 155:7c6005933d4c 47 }
bwang 155:7c6005933d4c 48
bwang 155:7c6005933d4c 49 usecs = timer.read_us();
dicarloj 13:41d102a53caf 50 timer.stop();
dicarloj 13:41d102a53caf 51 timer.reset();
dicarloj 13:41d102a53caf 52 timer.start();
dicarloj 13:41d102a53caf 53 }
dicarloj 13:41d102a53caf 54
bwang 16:f283d6032fe5 55 float PwmIn::get_throttle()
dicarloj 13:41d102a53caf 56 {
bwang 140:170411d158b5 57 if(timer.read_us() > 40000) {
bwang 140:170411d158b5 58 enabled = false;
bwang 141:ccd21d7fbd1a 59 usecs = usec_min;
bwang 140:170411d158b5 60 }
dicarloj 13:41d102a53caf 61 if(!enabled) return -1;
dicarloj 13:41d102a53caf 62 return constrain(map((float)usecs, usec_min, usec_max, 0, 1), 0, 1);
dicarloj 13:41d102a53caf 63 }
dicarloj 13:41d102a53caf 64