New version of quadcopter software written to OO principles
Dependencies: mbed MODSERIAL filter mbed-rtos ConfigFile PID PPM FreeIMU_external_magnetometer TinyGPS
Sensors/LidarLitePwm/LidarLitePwm.cpp@4:9ffbf9101992, 2015-05-08 (annotated)
- Committer:
- joe4465
- Date:
- Fri May 08 09:07:38 2015 +0000
- Revision:
- 4:9ffbf9101992
End of FYP
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
joe4465 | 4:9ffbf9101992 | 1 | #include "LidarLitePwm.h" |
joe4465 | 4:9ffbf9101992 | 2 | |
joe4465 | 4:9ffbf9101992 | 3 | LidarLitePwm::LidarLitePwm(PinName pin) : _interrupt(pin) |
joe4465 | 4:9ffbf9101992 | 4 | { |
joe4465 | 4:9ffbf9101992 | 5 | _pulseStartTime = 0; |
joe4465 | 4:9ffbf9101992 | 6 | _range = 0; |
joe4465 | 4:9ffbf9101992 | 7 | _lidarFilter = new filter(5); |
joe4465 | 4:9ffbf9101992 | 8 | _timer.start(); |
joe4465 | 4:9ffbf9101992 | 9 | _interrupt.rise(this, &LidarLitePwm::pulseStart); |
joe4465 | 4:9ffbf9101992 | 10 | _interrupt.fall(this, &LidarLitePwm::pulseStop); |
joe4465 | 4:9ffbf9101992 | 11 | } |
joe4465 | 4:9ffbf9101992 | 12 | |
joe4465 | 4:9ffbf9101992 | 13 | LidarLitePwm::~LidarLitePwm(){} |
joe4465 | 4:9ffbf9101992 | 14 | |
joe4465 | 4:9ffbf9101992 | 15 | int LidarLitePwm::read() |
joe4465 | 4:9ffbf9101992 | 16 | { |
joe4465 | 4:9ffbf9101992 | 17 | //if(_range < 30) return 0; |
joe4465 | 4:9ffbf9101992 | 18 | //else return _range - 30; |
joe4465 | 4:9ffbf9101992 | 19 | |
joe4465 | 4:9ffbf9101992 | 20 | return _range - 10; |
joe4465 | 4:9ffbf9101992 | 21 | } |
joe4465 | 4:9ffbf9101992 | 22 | |
joe4465 | 4:9ffbf9101992 | 23 | LidarLitePwm::operator int() |
joe4465 | 4:9ffbf9101992 | 24 | { |
joe4465 | 4:9ffbf9101992 | 25 | return read(); |
joe4465 | 4:9ffbf9101992 | 26 | } |
joe4465 | 4:9ffbf9101992 | 27 | |
joe4465 | 4:9ffbf9101992 | 28 | void LidarLitePwm::pulseStart() |
joe4465 | 4:9ffbf9101992 | 29 | { |
joe4465 | 4:9ffbf9101992 | 30 | _pulseStartTime = _timer.read_us(); |
joe4465 | 4:9ffbf9101992 | 31 | } |
joe4465 | 4:9ffbf9101992 | 32 | |
joe4465 | 4:9ffbf9101992 | 33 | void LidarLitePwm::pulseStop() |
joe4465 | 4:9ffbf9101992 | 34 | { |
joe4465 | 4:9ffbf9101992 | 35 | int endTime = _timer.read_us(); |
joe4465 | 4:9ffbf9101992 | 36 | if (endTime < _pulseStartTime) return; // Escape if there's been a roll over |
joe4465 | 4:9ffbf9101992 | 37 | int range = (endTime - _pulseStartTime) / 10; // 10uS per CM |
joe4465 | 4:9ffbf9101992 | 38 | _range = _lidarFilter->process(range); |
joe4465 | 4:9ffbf9101992 | 39 | } |