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

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?

UserRevisionLine numberNew 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 }