Ultrasonic Range Finder Sensors Library. May be used for SRF05 and all others sensors of the same kind (50ms period, 10us pulse)
Dependents: FRC_2018 TestVMA 0hackton_08_06_18 lib_FRC_2019 ... more
VMA306.cpp@0:bc016581f12b, 2018-05-21 (annotated)
- Committer:
- haarkon
- Date:
- Mon May 21 12:37:44 2018 +0000
- Revision:
- 0:bc016581f12b
- Child:
- 2:6bb02f1d4ca6
Untested First version of VMA306 (SRF05 and others) ultrasonic range finder Sensors.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
haarkon | 0:bc016581f12b | 1 | /* mbed VMA306 Ultrasonic Rangefiner Library |
haarkon | 0:bc016581f12b | 2 | */ |
haarkon | 0:bc016581f12b | 3 | |
haarkon | 0:bc016581f12b | 4 | #include "VMA306.h" |
haarkon | 0:bc016581f12b | 5 | |
haarkon | 0:bc016581f12b | 6 | VMA306::VMA306(PinName trigger, PinName echo) |
haarkon | 0:bc016581f12b | 7 | : _trigger(trigger), _echo(echo) { |
haarkon | 0:bc016581f12b | 8 | |
haarkon | 0:bc016581f12b | 9 | // Attach interrupts |
haarkon | 0:bc016581f12b | 10 | _echo.rise(this, &VMA306::_rising); |
haarkon | 0:bc016581f12b | 11 | _echo.fall(this, &VMA306::_falling); |
haarkon | 0:bc016581f12b | 12 | } |
haarkon | 0:bc016581f12b | 13 | |
haarkon | 0:bc016581f12b | 14 | void VMA306::_startRange() { |
haarkon | 0:bc016581f12b | 15 | // send a trigger pulse, 20uS long |
haarkon | 0:bc016581f12b | 16 | _trigger = 1; |
haarkon | 0:bc016581f12b | 17 | wait (0.000002); |
haarkon | 0:bc016581f12b | 18 | _trigger = 0; |
haarkon | 0:bc016581f12b | 19 | } |
haarkon | 0:bc016581f12b | 20 | |
haarkon | 0:bc016581f12b | 21 | // Clear and start the timer at the begining of the echo pulse |
haarkon | 0:bc016581f12b | 22 | void VMA306::_rising(void) { |
haarkon | 0:bc016581f12b | 23 | _timer.reset(); |
haarkon | 0:bc016581f12b | 24 | _timer.start(); |
haarkon | 0:bc016581f12b | 25 | } |
haarkon | 0:bc016581f12b | 26 | |
haarkon | 0:bc016581f12b | 27 | // Stop and read the timer at the end of the pulse |
haarkon | 0:bc016581f12b | 28 | void VMA306::_falling(void) { |
haarkon | 0:bc016581f12b | 29 | _timer.stop(); |
haarkon | 0:bc016581f12b | 30 | _dist = _timer.read_us()/58.0; |
haarkon | 0:bc016581f12b | 31 | _VMA306Flag = 1; |
haarkon | 0:bc016581f12b | 32 | } |
haarkon | 0:bc016581f12b | 33 | |
haarkon | 0:bc016581f12b | 34 | void VMA306::startPeriodicTrigger (float period) { |
haarkon | 0:bc016581f12b | 35 | _ticker.attach(this, &VMA306::_startRange, period); |
haarkon | 0:bc016581f12b | 36 | } |
haarkon | 0:bc016581f12b | 37 | |
haarkon | 0:bc016581f12b | 38 | int VMA306::isDataReady (void){ |
haarkon | 0:bc016581f12b | 39 | return (_VMA306Flag); |
haarkon | 0:bc016581f12b | 40 | } |
haarkon | 0:bc016581f12b | 41 | |
haarkon | 0:bc016581f12b | 42 | |
haarkon | 0:bc016581f12b | 43 | float VMA306::read(void) { |
haarkon | 0:bc016581f12b | 44 | _VMA306Flag = 0; |
haarkon | 0:bc016581f12b | 45 | return (_dist); |
haarkon | 0:bc016581f12b | 46 | } |
haarkon | 0:bc016581f12b | 47 | |
haarkon | 0:bc016581f12b | 48 | VMA306::operator float() { |
haarkon | 0:bc016581f12b | 49 | _VMA306Flag = 0; |
haarkon | 0:bc016581f12b | 50 | return read(); |
haarkon | 0:bc016581f12b | 51 | } |