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@6:158dfeb5c24d, 2018-06-05 (annotated)
- Committer:
- haarkon
- Date:
- Tue Jun 05 07:27:37 2018 +0000
- Revision:
- 6:158dfeb5c24d
- Parent:
- 3:4d9c742b860b
OK version (without warning);
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 | 3:4d9c742b860b | 6 | VMA306::VMA306(PinName trigG, PinName echoG, PinName trigB, PinName echoB, PinName trigD, PinName echoD) |
haarkon | 3:4d9c742b860b | 7 | : _trig1(trigG), _echo1(echoG), _trig2(trigB), _echo2(echoB), _trig3(trigD), _echo3(echoD) |
haarkon | 3:4d9c742b860b | 8 | { |
haarkon | 3:4d9c742b860b | 9 | |
haarkon | 0:bc016581f12b | 10 | // Attach interrupts |
haarkon | 3:4d9c742b860b | 11 | _ticker.attach(callback(this, &VMA306::_startRanging), 0.05); |
haarkon | 3:4d9c742b860b | 12 | |
haarkon | 3:4d9c742b860b | 13 | _echo1.rise(callback(this, &VMA306::_rise1)); |
haarkon | 3:4d9c742b860b | 14 | _echo1.fall(callback(this, &VMA306::_fall1)); |
haarkon | 3:4d9c742b860b | 15 | _echo1.enable_irq(); |
haarkon | 3:4d9c742b860b | 16 | _echo2.rise(callback(this, &VMA306::_rise2)); |
haarkon | 3:4d9c742b860b | 17 | _echo2.fall(callback(this, &VMA306::_fall2)); |
haarkon | 3:4d9c742b860b | 18 | _echo2.enable_irq(); |
haarkon | 3:4d9c742b860b | 19 | _echo3.rise(callback(this, &VMA306::_rise3)); |
haarkon | 3:4d9c742b860b | 20 | _echo3.fall(callback(this, &VMA306::_fall3)); |
haarkon | 3:4d9c742b860b | 21 | _echo3.enable_irq(); |
haarkon | 3:4d9c742b860b | 22 | _timer.start(); |
haarkon | 0:bc016581f12b | 23 | } |
haarkon | 3:4d9c742b860b | 24 | |
haarkon | 3:4d9c742b860b | 25 | void VMA306::_startRanging() |
haarkon | 3:4d9c742b860b | 26 | { |
haarkon | 3:4d9c742b860b | 27 | static int step = 1; |
haarkon | 3:4d9c742b860b | 28 | |
haarkon | 3:4d9c742b860b | 29 | switch(step) { |
haarkon | 3:4d9c742b860b | 30 | case 1: |
haarkon | 3:4d9c742b860b | 31 | _trig1 = 1; |
haarkon | 3:4d9c742b860b | 32 | wait_us(20); |
haarkon | 3:4d9c742b860b | 33 | _trig1 = 0; |
haarkon | 3:4d9c742b860b | 34 | step = 2; |
haarkon | 3:4d9c742b860b | 35 | break; |
haarkon | 3:4d9c742b860b | 36 | |
haarkon | 3:4d9c742b860b | 37 | case 2: |
haarkon | 3:4d9c742b860b | 38 | _trig2 = 1; |
haarkon | 3:4d9c742b860b | 39 | wait_us(20); |
haarkon | 3:4d9c742b860b | 40 | _trig2 = 0; |
haarkon | 3:4d9c742b860b | 41 | step = 3; |
haarkon | 3:4d9c742b860b | 42 | break; |
haarkon | 3:4d9c742b860b | 43 | |
haarkon | 3:4d9c742b860b | 44 | case 3: |
haarkon | 3:4d9c742b860b | 45 | _trig3 = 1; |
haarkon | 3:4d9c742b860b | 46 | wait_us(20); |
haarkon | 3:4d9c742b860b | 47 | _trig3 = 0; |
haarkon | 3:4d9c742b860b | 48 | step = 1; |
haarkon | 3:4d9c742b860b | 49 | break; |
haarkon | 3:4d9c742b860b | 50 | } |
haarkon | 0:bc016581f12b | 51 | } |
haarkon | 0:bc016581f12b | 52 | |
haarkon | 0:bc016581f12b | 53 | // Clear and start the timer at the begining of the echo pulse |
haarkon | 3:4d9c742b860b | 54 | void VMA306::_rise1(void) |
haarkon | 3:4d9c742b860b | 55 | { |
haarkon | 3:4d9c742b860b | 56 | _startValue1 = _timer.read_us(); |
haarkon | 0:bc016581f12b | 57 | } |
haarkon | 0:bc016581f12b | 58 | |
haarkon | 0:bc016581f12b | 59 | // Stop and read the timer at the end of the pulse |
haarkon | 3:4d9c742b860b | 60 | void VMA306::_fall1(void) |
haarkon | 3:4d9c742b860b | 61 | { |
haarkon | 3:4d9c742b860b | 62 | _dist1 = (double)(_timer.read_us() - _startValue1)/58.0; |
haarkon | 3:4d9c742b860b | 63 | _VMA306Flag1 = 1; |
haarkon | 3:4d9c742b860b | 64 | } |
haarkon | 3:4d9c742b860b | 65 | |
haarkon | 3:4d9c742b860b | 66 | // Clear and start the timer at the begining of the echo pulse |
haarkon | 3:4d9c742b860b | 67 | void VMA306::_rise2(void) |
haarkon | 3:4d9c742b860b | 68 | { |
haarkon | 3:4d9c742b860b | 69 | _startValue2 = _timer.read_us(); |
haarkon | 3:4d9c742b860b | 70 | } |
haarkon | 3:4d9c742b860b | 71 | |
haarkon | 3:4d9c742b860b | 72 | // Stop and read the timer at the end of the pulse |
haarkon | 3:4d9c742b860b | 73 | void VMA306::_fall2(void) |
haarkon | 3:4d9c742b860b | 74 | { |
haarkon | 3:4d9c742b860b | 75 | _dist2 = (double)(_timer.read_us() - _startValue2)/58.0; |
haarkon | 3:4d9c742b860b | 76 | _VMA306Flag2 = 1; |
haarkon | 3:4d9c742b860b | 77 | } |
haarkon | 3:4d9c742b860b | 78 | |
haarkon | 3:4d9c742b860b | 79 | // Clear and start the timer at the begining of the echo pulse |
haarkon | 3:4d9c742b860b | 80 | void VMA306::_rise3(void) |
haarkon | 3:4d9c742b860b | 81 | { |
haarkon | 3:4d9c742b860b | 82 | _startValue3 = _timer.read_us(); |
haarkon | 3:4d9c742b860b | 83 | } |
haarkon | 3:4d9c742b860b | 84 | |
haarkon | 3:4d9c742b860b | 85 | // Stop and read the timer at the end of the pulse |
haarkon | 3:4d9c742b860b | 86 | void VMA306::_fall3(void) |
haarkon | 3:4d9c742b860b | 87 | { |
haarkon | 3:4d9c742b860b | 88 | _dist3 = (double)(_timer.read_us() - _startValue3)/58.0; |
haarkon | 3:4d9c742b860b | 89 | _VMA306Flag3 = 1; |
haarkon | 0:bc016581f12b | 90 | } |
haarkon | 0:bc016581f12b | 91 | |
haarkon | 3:4d9c742b860b | 92 | int VMA306::isUSGReady (void) |
haarkon | 3:4d9c742b860b | 93 | { |
haarkon | 3:4d9c742b860b | 94 | return (_VMA306Flag1); |
haarkon | 3:4d9c742b860b | 95 | } |
haarkon | 0:bc016581f12b | 96 | |
haarkon | 3:4d9c742b860b | 97 | int VMA306::isUSBReady (void) |
haarkon | 3:4d9c742b860b | 98 | { |
haarkon | 3:4d9c742b860b | 99 | return (_VMA306Flag2); |
haarkon | 3:4d9c742b860b | 100 | } |
haarkon | 3:4d9c742b860b | 101 | |
haarkon | 3:4d9c742b860b | 102 | int VMA306::isUSDReady (void) |
haarkon | 3:4d9c742b860b | 103 | { |
haarkon | 3:4d9c742b860b | 104 | return (_VMA306Flag3); |
haarkon | 0:bc016581f12b | 105 | } |
haarkon | 0:bc016581f12b | 106 | |
haarkon | 3:4d9c742b860b | 107 | float VMA306::readUSG(void) |
haarkon | 3:4d9c742b860b | 108 | { |
haarkon | 3:4d9c742b860b | 109 | _VMA306Flag1 = 0; |
haarkon | 3:4d9c742b860b | 110 | return (_dist1); |
haarkon | 0:bc016581f12b | 111 | } |
haarkon | 0:bc016581f12b | 112 | |
haarkon | 3:4d9c742b860b | 113 | float VMA306::readUSB(void) |
haarkon | 3:4d9c742b860b | 114 | { |
haarkon | 3:4d9c742b860b | 115 | _VMA306Flag2 = 0; |
haarkon | 3:4d9c742b860b | 116 | return (_dist2); |
haarkon | 0:bc016581f12b | 117 | } |
haarkon | 3:4d9c742b860b | 118 | |
haarkon | 3:4d9c742b860b | 119 | float VMA306::readUSD(void) |
haarkon | 3:4d9c742b860b | 120 | { |
haarkon | 3:4d9c742b860b | 121 | _VMA306Flag3 = 0; |
haarkon | 3:4d9c742b860b | 122 | return (_dist3); |
haarkon | 3:4d9c742b860b | 123 | } |